lwi = LWI_TIMEOUT(cfs_time_seconds(cfs_fail_val), NULL, NULL);
l_wait_event(thread->t_ctl_waitq,
lwi = LWI_TIMEOUT(cfs_time_seconds(cfs_fail_val), NULL, NULL);
l_wait_event(thread->t_ctl_waitq,
- oii = cfs_list_entry(scrub->os_inconsistent_items.next,
- struct osd_inconsistent_item, oii_list);
+ oii = list_entry(scrub->os_inconsistent_items.next,
+ struct osd_inconsistent_item, oii_list);
{
spin_lock(&scrub->os_lock);
if (osd_scrub_has_window(scrub, &it->ooi_cache) ||
{
spin_lock(&scrub->os_lock);
if (osd_scrub_has_window(scrub, &it->ooi_cache) ||
- l_wait_event(thread->t_ctl_waitq,
- osd_scrub_wakeup(scrub, it),
- &lwi);
+ if (it != NULL)
+ l_wait_event(thread->t_ctl_waitq, osd_scrub_wakeup(scrub, it),
+ &lwi);
item->oii_dentry = dget(dentry);
item->oii_scandir = scandir;
item->oii_filldir = filldir;
item->oii_dentry = dget(dentry);
item->oii_scandir = scandir;
item->oii_filldir = filldir;
- item = cfs_list_entry(dev->od_ios_list.next,
- struct osd_ios_item, oii_list);
- cfs_list_del_init(&item->oii_list);
+ item = list_entry(dev->od_ios_list.next,
+ struct osd_ios_item, oii_list);
+ list_del_init(&item->oii_list);
- while (!cfs_list_empty(&dev->od_ios_list)) {
- item = cfs_list_entry(dev->od_ios_list.next,
- struct osd_ios_item, oii_list);
- cfs_list_del_init(&item->oii_list);
+ while (!list_empty(&dev->od_ios_list)) {
+ item = list_entry(dev->od_ios_list.next,
+ struct osd_ios_item, oii_list);
+ list_del_init(&item->oii_list);
- if (scrub->os_file.sf_status == SS_COMPLETED)
+ if (scrub->os_file.sf_status == SS_COMPLETED) {
+ if (!(flags & SS_SET_FAILOUT))
+ flags |= SS_CLEAR_FAILOUT;
+
+ if (!(flags & SS_SET_DRYRUN))
+ flags |= SS_CLEAR_DRYRUN;
+
scrub->os_start_flags = flags;
thread_set_flags(thread, 0);
scrub->os_start_flags = flags;
thread_set_flags(thread, 0);
init_waitqueue_head(&scrub->os_thread.t_ctl_waitq);
init_rwsem(&scrub->os_rwsem);
spin_lock_init(&scrub->os_lock);
init_waitqueue_head(&scrub->os_thread.t_ctl_waitq);
init_rwsem(&scrub->os_rwsem);
spin_lock_init(&scrub->os_lock);
if (lu_fid_eq(fid, &oii->oii_cache.oic_fid)) {
*id = oii->oii_cache.oic_lid;
spin_unlock(&scrub->os_lock);
if (lu_fid_eq(fid, &oii->oii_cache.oic_fid)) {
*id = oii->oii_cache.oic_lid;
spin_unlock(&scrub->os_lock);
-static int scrub_bits_dump(char **buf, int *len, int bits, const char *names[],
+static int scrub_bits_dump(struct seq_file *m, int bits, const char *names[],
- rc = snprintf(*buf, *len, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
- if (rc <= 0)
- return -ENOSPC;
+ rc = seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+ if (rc < 0)
+ return rc;
- rc = snprintf(*buf, *len, "%s%c", names[i],
- bits != 0 ? ',' : '\n');
- if (rc <= 0)
- return -ENOSPC;
-
- *buf += rc;
- *len -= rc;
+ rc = seq_printf(m, "%s%c", names[i],
+ bits != 0 ? ',' : '\n');
+ if (rc < 0)
+ return rc;
-static int scrub_time_dump(char **buf, int *len, __u64 time, const char *prefix)
+static int scrub_time_dump(struct seq_file *m, __u64 time, const char *prefix)
- rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix,
+ rc = seq_printf(m, "%s: "LPU64" seconds\n", prefix,
-static int scrub_pos_dump(char **buf, int *len, __u64 pos, const char *prefix)
+static int scrub_pos_dump(struct seq_file *m, __u64 pos, const char *prefix)
- rc = snprintf(*buf, *len, "%s: "LPU64"\n", prefix, pos);
+ rc = seq_printf(m, "%s: "LPU64"\n", prefix, pos);
- rc = snprintf(buf, len,
- "name: OI_scrub\n"
- "magic: 0x%x\n"
- "oi_files: %d\n"
- "status: %s\n",
- sf->sf_magic, (int)sf->sf_oi_count,
- scrub_status_names[sf->sf_status]);
- if (rc <= 0)
+ rc = seq_printf(m, "name: OI_scrub\n"
+ "magic: 0x%x\n"
+ "oi_files: %d\n"
+ "status: %s\n",
+ sf->sf_magic, (int)sf->sf_oi_count,
+ scrub_status_names[sf->sf_status]);
+ if (rc < 0)
- buf += rc;
- len -= rc;
- rc = scrub_bits_dump(&buf, &len, sf->sf_flags, scrub_flags_names,
+ rc = scrub_bits_dump(m, sf->sf_flags, scrub_flags_names,
- rc = scrub_bits_dump(&buf, &len, sf->sf_param, scrub_param_names,
+ rc = scrub_bits_dump(m, sf->sf_param, scrub_param_names,
- rc = scrub_time_dump(&buf, &len, sf->sf_time_last_complete,
+ rc = scrub_time_dump(m, sf->sf_time_last_complete,
- rc = scrub_time_dump(&buf, &len, sf->sf_time_latest_start,
+ rc = scrub_time_dump(m, sf->sf_time_latest_start,
- rc = scrub_time_dump(&buf, &len, sf->sf_time_last_checkpoint,
+ rc = scrub_time_dump(m, sf->sf_time_last_checkpoint,
- rc = scrub_pos_dump(&buf, &len, sf->sf_pos_latest_start,
+ rc = scrub_pos_dump(m, sf->sf_pos_latest_start,
- rc = scrub_pos_dump(&buf, &len, sf->sf_pos_last_checkpoint,
+ rc = scrub_pos_dump(m, sf->sf_pos_last_checkpoint,
- rc = scrub_pos_dump(&buf, &len, sf->sf_pos_first_inconsistent,
+ rc = scrub_pos_dump(m, sf->sf_pos_first_inconsistent,
checked, sf->sf_items_updated, sf->sf_items_failed,
sf->sf_items_updated_prior, sf->sf_items_noscrub,
sf->sf_items_igif, sf->sf_success_count);
checked, sf->sf_items_updated, sf->sf_items_failed,
sf->sf_items_updated_prior, sf->sf_items_noscrub,
sf->sf_items_igif, sf->sf_success_count);
} else {
if (sf->sf_run_time != 0)
do_div(speed, sf->sf_run_time);
} else {
if (sf->sf_run_time != 0)
do_div(speed, sf->sf_run_time);
sf->sf_run_time, speed, scrub->os_lf_scanned,
scrub->os_lf_repaired, scrub->os_lf_failed);
}
sf->sf_run_time, speed, scrub->os_lf_scanned,
scrub->os_lf_repaired, scrub->os_lf_failed);
}