struct lfsck_instance *lfsck);
int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
const char *prefix);
-int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix);
+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *name);
int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
const char *prefix);
void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
goto out;
rc = lfsck_time_dump(m, lo->ll_time_last_complete,
- "time_since_last_completed");
+ "last_completed");
if (rc < 0)
goto out;
rc = lfsck_time_dump(m, lo->ll_time_latest_start,
- "time_since_latest_start");
+ "latest_start");
if (rc < 0)
goto out;
rc = lfsck_time_dump(m, lo->ll_time_last_checkpoint,
- "time_since_last_checkpoint");
+ "last_checkpoint");
if (rc < 0)
goto out;
int flag;
int i;
bool newline = (bits != 0 ? false : true);
+ int rc;
- seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+ rc = seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+ if (rc < 0)
+ return rc;
for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
if (flag & bits) {
if (bits == 0)
newline = true;
- seq_printf(m, "%s%c", names[i],
- newline ? '\n' : ',');
+ rc = seq_printf(m, "%s%c", names[i],
+ newline ? '\n' : ',');
+ if (rc < 0)
+ return rc;
}
}
}
if (!newline)
- seq_printf(m, "\n");
- return 0;
+ rc = seq_printf(m, "\n");
+
+ return rc;
}
-int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix)
+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *name)
{
- if (time != 0)
- seq_printf(m, "%s: "LPU64" seconds\n", prefix,
- cfs_time_current_sec() - time);
- else
- seq_printf(m, "%s: N/A\n", prefix);
- return 0;
+ int rc;
+
+ if (time == 0) {
+ rc = seq_printf(m, "%s_time: N/A\n", name);
+ if (rc == 0)
+ rc = seq_printf(m, "time_since_%s: N/A\n", name);
+
+ return rc;
+ }
+
+ rc = seq_printf(m, "%s_time: "LPU64"\n", name, time);
+ if (rc == 0)
+ rc = seq_printf(m, "time_since_%s: "LPU64" seconds\n",
+ name, cfs_time_current_sec() - time);
+
+ return rc;
}
int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
{
if (fid_is_zero(&pos->lp_dir_parent)) {
if (pos->lp_oit_cookie == 0)
- seq_printf(m, "%s: N/A, N/A, N/A\n",
- prefix);
- else
- seq_printf(m, "%s: "LPU64", N/A, N/A\n",
- prefix, pos->lp_oit_cookie);
- } else {
- seq_printf(m, "%s: "LPU64", "DFID", "LPX64"\n",
- prefix, pos->lp_oit_cookie,
- PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
+ return seq_printf(m, "%s: N/A, N/A, N/A\n", prefix);
+
+ return seq_printf(m, "%s: "LPU64", N/A, N/A\n",
+ prefix, pos->lp_oit_cookie);
}
- return 0;
+
+ return seq_printf(m, "%s: "LPU64", "DFID", "LPX64"\n",
+ prefix, pos->lp_oit_cookie,
+ PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
}
void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
goto out;
rc = lfsck_time_dump(m, ns->ln_time_last_complete,
- "time_since_last_completed");
+ "last_completed");
if (rc < 0)
goto out;
rc = lfsck_time_dump(m, ns->ln_time_latest_start,
- "time_since_latest_start");
+ "latest_start");
if (rc < 0)
goto out;
rc = lfsck_time_dump(m, ns->ln_time_last_checkpoint,
- "time_since_last_checkpoint");
+ "last_checkpoint");
if (rc < 0)
goto out;
if (duration != 0)
do_div(new_checked, duration);
+
if (rtime != 0)
do_div(speed, rtime);
- lfsck_namespace_dump_statistics(m, ns, checked,
- ns->ln_objs_checked_phase2,
- rtime, ns->ln_run_time_phase2);
+ lfsck_namespace_dump_statistics(m, ns, checked, 0, rtime, 0);
seq_printf(m, "average_speed_phase1: "LPU64" items/sec\n"
"average_speed_phase2: N/A\n"
+ "average_speed_total: "LPU64" items/sec\n"
"real_time_speed_phase1: "LPU64" items/sec\n"
"real_time_speed_phase2: N/A\n",
speed,
+ speed,
new_checked);
LASSERT(lfsck->li_di_oit != NULL);
com->lc_new_checked;
__u64 speed1 = ns->ln_items_checked;
__u64 speed2 = checked;
+ __u64 speed0 = speed1 + speed2;
__u64 new_checked = com->lc_new_checked *
msecs_to_jiffies(MSEC_PER_SEC);
__u32 rtime = ns->ln_run_time_phase2 +
cfs_duration_sec(duration + HALF_SEC);
+ __u32 time0 = ns->ln_run_time_phase1 + rtime;
if (duration != 0)
do_div(new_checked, duration);
+
if (ns->ln_run_time_phase1 != 0)
do_div(speed1, ns->ln_run_time_phase1);
+ else if (ns->ln_items_checked != 0)
+ time0++;
+
if (rtime != 0)
do_div(speed2, rtime);
+ else if (checked != 0)
+ time0++;
+
+ if (time0 != 0)
+ do_div(speed0, time0);
+
lfsck_namespace_dump_statistics(m, ns, ns->ln_items_checked,
checked,
ns->ln_run_time_phase1, rtime);
-
seq_printf(m, "average_speed_phase1: "LPU64" items/sec\n"
"average_speed_phase2: "LPU64" objs/sec\n"
+ "average_speed_total: "LPU64" items/sec\n"
"real_time_speed_phase1: N/A\n"
"real_time_speed_phase2: "LPU64" objs/sec\n"
"current_position: "DFID"\n",
speed1,
speed2,
+ speed0,
new_checked,
PFID(&ns->ln_fid_latest_scanned_phase2));
} else {
__u64 speed1 = ns->ln_items_checked;
__u64 speed2 = ns->ln_objs_checked_phase2;
+ __u64 speed0 = speed1 + speed2;
+ __u32 time0 = ns->ln_run_time_phase1 + ns->ln_run_time_phase2;
if (ns->ln_run_time_phase1 != 0)
do_div(speed1, ns->ln_run_time_phase1);
+ else if (ns->ln_items_checked != 0)
+ time0++;
+
if (ns->ln_run_time_phase2 != 0)
do_div(speed2, ns->ln_run_time_phase2);
+ else if (ns->ln_objs_checked_phase2 != 0)
+ time0++;
+
+ if (time0 != 0)
+ do_div(speed0, time0);
+
lfsck_namespace_dump_statistics(m, ns, ns->ln_items_checked,
ns->ln_objs_checked_phase2,
ns->ln_run_time_phase1,
ns->ln_run_time_phase2);
-
seq_printf(m, "average_speed_phase1: "LPU64" items/sec\n"
"average_speed_phase2: "LPU64" objs/sec\n"
+ "average_speed_total: "LPU64" items/sec\n"
"real_time_speed_phase1: N/A\n"
"real_time_speed_phase2: N/A\n"
"current_position: N/A\n",
speed1,
- speed2);
+ speed2,
+ speed0);
}
out:
up_read(&com->lc_sem);