X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosd-ldiskfs%2Fosd_lproc.c;h=0c93d277a4929f0f8ee8e5db49606a984aa9c26c;hp=599d7e20bfebf271a98a578fe8093f978482dc25;hb=a48853cf3dc51b24cc276fcf5f2e3e25a32c0d25;hpb=0e4e1f61d1196df7415ee143804debcfe0ee88dd diff --git a/lustre/osd-ldiskfs/osd_lproc.c b/lustre/osd-ldiskfs/osd_lproc.c index 599d7e2..0c93d27 100644 --- a/lustre/osd-ldiskfs/osd_lproc.c +++ b/lustre/osd-ldiskfs/osd_lproc.c @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -41,7 +37,6 @@ #define DEBUG_SUBSYSTEM S_OSD #include -#include #include "osd_internal.h" @@ -63,7 +58,7 @@ void osd_brw_stats_update(struct osd_device *osd, struct osd_iobuf *iobuf) if (unlikely(nr_pages == 0)) return; - blocks_per_page = PAGE_CACHE_SIZE >> osd_sb(osd)->s_blocksize_bits; + blocks_per_page = PAGE_SIZE >> osd_sb(osd)->s_blocksize_bits; lprocfs_oh_tally_log2(&s->hist[BRW_R_PAGES+rw], nr_pages); @@ -125,12 +120,13 @@ static void display_brw_stats(struct seq_file *seq, char *name, char *units, static void brw_stats_show(struct seq_file *seq, struct brw_stats *brw_stats) { - struct timeval now; + struct timespec64 now; /* this sampling races with updates */ - do_gettimeofday(&now); - seq_printf(seq, "snapshot_time: %lu.%lu (secs.usecs)\n", - now.tv_sec, now.tv_usec); + ktime_get_real_ts64(&now); + + seq_printf(seq, "snapshot_time: %lld.%09ld (secs.nsecs)\n", + (s64)now.tv_sec, now.tv_nsec); display_brw_stats(seq, "pages per bulk r/w", "rpcs", &brw_stats->hist[BRW_R_PAGES], @@ -354,7 +350,7 @@ lprocfs_osd_force_sync_seq_write(struct file *file, const char __user *buffer, return rc == 0 ? count : rc; } -LPROC_SEQ_FOPS_WO_TYPE(ldiskfs, osd_force_sync); +LPROC_SEQ_FOPS_WR_ONLY(ldiskfs, osd_force_sync); static int ldiskfs_osd_pdo_seq_show(struct seq_file *m, void *data) { @@ -387,7 +383,7 @@ static int ldiskfs_osd_auto_scrub_seq_show(struct seq_file *m, void *data) if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; - seq_printf(m, "%d\n", !dev->od_noscrub); + seq_printf(m, "%lld\n", dev->od_auto_scrub_interval); return 0; } @@ -409,7 +405,7 @@ ldiskfs_osd_auto_scrub_seq_write(struct file *file, const char __user *buffer, if (rc) return rc; - dev->od_noscrub = !val; + dev->od_auto_scrub_interval = val; return count; } LPROC_SEQ_FOPS(ldiskfs_osd_auto_scrub); @@ -422,7 +418,7 @@ static int ldiskfs_osd_full_scrub_ratio_seq_show(struct seq_file *m, void *data) if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; - seq_printf(m, LPU64"\n", dev->od_full_scrub_ratio); + seq_printf(m, "%llu\n", dev->od_full_scrub_ratio); return 0; } @@ -462,7 +458,7 @@ static int ldiskfs_osd_full_scrub_threshold_rate_seq_show(struct seq_file *m, if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; - seq_printf(m, LPU64" (bad OI mappings/minute)\n", + seq_printf(m, "%llu (bad OI mappings/minute)\n", dev->od_full_scrub_threshold_rate); return 0; } @@ -527,7 +523,8 @@ static int ldiskfs_osd_oi_scrub_seq_show(struct seq_file *m, void *data) if (unlikely(dev->od_mnt == NULL)) return -EINPROGRESS; - return osd_scrub_dump(m, dev); + osd_scrub_dump(m, dev); + return 0; } LPROC_SEQ_FOPS_RO(ldiskfs_osd_oi_scrub); @@ -539,7 +536,7 @@ static int ldiskfs_osd_readcache_seq_show(struct seq_file *m, void *data) if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; - seq_printf(m, LPU64"\n", osd->od_readcache_max_filesize); + seq_printf(m, "%llu\n", osd->od_readcache_max_filesize); return 0; } @@ -557,7 +554,7 @@ ldiskfs_osd_readcache_seq_write(struct file *file, const char __user *buffer, if (unlikely(osd->od_mnt == NULL)) return -EINPROGRESS; - rc = lprocfs_str_to_s64(buffer, count, &val); + rc = lprocfs_str_with_units_to_s64(buffer, count, &val, '1'); if (rc) return rc; if (val < 0) @@ -648,6 +645,41 @@ int osd_register_proc_index_in_idif(struct osd_device *osd) } #endif +static int ldiskfs_osd_index_backup_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; + + seq_printf(m, "%d\n", dev->od_index_backup_policy); + return 0; +} + +static ssize_t ldiskfs_osd_index_backup_seq_write(struct file *file, + const char __user *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); + __s64 val; + int rc; + + LASSERT(dev != NULL); + if (unlikely(dev->od_mnt == NULL)) + return -EINPROGRESS; + + rc = lprocfs_str_to_s64(buffer, count, &val); + if (rc) + return rc; + + dev->od_index_backup_policy = val; + return count; +} +LPROC_SEQ_FOPS(ldiskfs_osd_index_backup); + LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_blksize); LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytestotal); LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytesfree); @@ -690,6 +722,8 @@ struct lprocfs_vars lprocfs_osd_obd_vars[] = { .fops = &ldiskfs_osd_wcache_fops }, { .name = "readcache_max_filesize", .fops = &ldiskfs_osd_readcache_fops }, + { .name = "index_backup", + .fops = &ldiskfs_osd_index_backup_fops }, { NULL } };