* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2013, Intel Corporation.
+ * Copyright (c) 2011, 2014, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
* Author: Mikhail Pershin <tappro@sun.com>
*/
-#define DEBUG_SUBSYSTEM S_CLASS
+#define DEBUG_SUBSYSTEM S_OSD
#include <lprocfs_status.h>
#include <lustre/lustre_idl.h>
display_brw_stats(seq, "I/O time (1/1000s)", "ios",
&brw_stats->hist[BRW_R_IO_TIME],
- &brw_stats->hist[BRW_W_IO_TIME], 1000 / HZ);
+ &brw_stats->hist[BRW_W_IO_TIME],
+ jiffies_to_msecs(1000) / MSEC_PER_SEC);
display_brw_stats(seq, "disk I/O size", "ios",
&brw_stats->hist[BRW_R_DISK_IOSIZE],
}
LPROC_SEQ_FOPS(ldiskfs_osd_auto_scrub);
+static int ldiskfs_osd_full_scrub_ratio_seq_show(struct seq_file *m, void *data)
+{
+ struct osd_device *dev = osd_dt_dev((struct dt_device *)m->private);
+
+ LASSERT(dev != NULL);
+ if (unlikely(dev->od_mnt == NULL))
+ return -EINPROGRESS;
+
+ return seq_printf(m, LPU64"\n", dev->od_full_scrub_ratio);
+}
+
+static ssize_t
+ldiskfs_osd_full_scrub_ratio_seq_write(struct file *file, const char *buffer,
+ size_t count, loff_t *off)
+{
+ struct seq_file *m = file->private_data;
+ struct dt_device *dt = m->private;
+ struct osd_device *dev = osd_dt_dev(dt);
+ int val, rc;
+
+ LASSERT(dev != NULL);
+ if (unlikely(dev->od_mnt == NULL))
+ return -EINPROGRESS;
+
+ rc = lprocfs_write_helper(buffer, count, &val);
+ if (rc != 0)
+ return rc;
+
+ if (val < 0)
+ return -EINVAL;
+
+ dev->od_full_scrub_ratio = val;
+ return count;
+}
+LPROC_SEQ_FOPS(ldiskfs_osd_full_scrub_ratio);
+
+static int ldiskfs_osd_full_scrub_speed_seq_show(struct seq_file *m, void *data)
+{
+ struct osd_device *dev = osd_dt_dev((struct dt_device *)m->private);
+
+ LASSERT(dev != NULL);
+ if (unlikely(dev->od_mnt == NULL))
+ return -EINPROGRESS;
+
+ return seq_printf(m, LPU64" (bad OI mappings/minute)\n",
+ dev->od_full_scrub_speed);
+}
+
+static ssize_t
+ldiskfs_osd_full_scrub_speed_seq_write(struct file *file, const char *buffer,
+ size_t count, loff_t *off)
+{
+ struct seq_file *m = file->private_data;
+ struct dt_device *dt = m->private;
+ struct osd_device *dev = osd_dt_dev(dt);
+ int val, rc;
+
+ LASSERT(dev != NULL);
+ if (unlikely(dev->od_mnt == NULL))
+ return -EINPROGRESS;
+
+ rc = lprocfs_write_helper(buffer, count, &val);
+ if (rc != 0)
+ return rc;
+
+ if (val < 0)
+ return -EINVAL;
+
+ dev->od_full_scrub_speed = val;
+ return count;
+}
+LPROC_SEQ_FOPS(ldiskfs_osd_full_scrub_speed);
+
static int
ldiskfs_osd_track_declares_assert_seq_show(struct seq_file *m, void *data)
{
}
LPROC_SEQ_FOPS_RO(ldiskfs_osd_oi_scrub);
-int ldiskfs_osd_readcache_seq_show(struct seq_file *m, void *data)
+static int ldiskfs_osd_readcache_seq_show(struct seq_file *m, void *data)
{
struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
return seq_printf(m, LPU64"\n", osd->od_readcache_max_filesize);
}
-ssize_t
+static ssize_t
ldiskfs_osd_readcache_seq_write(struct file *file, const char *buffer,
size_t count, loff_t *off)
{
.fops = &ldiskfs_osd_pdo_fops },
{ .name = "auto_scrub",
.fops = &ldiskfs_osd_auto_scrub_fops },
+ { .name = "full_scrub_ratio",
+ .fops = &ldiskfs_osd_full_scrub_ratio_fops },
+ { .name = "full_scrub_speed",
+ .fops = &ldiskfs_osd_full_scrub_speed_fops },
{ .name = "oi_scrub",
.fops = &ldiskfs_osd_oi_scrub_fops },
{ .name = "read_cache_enable",