Whamcloud - gitweb
LU-1453 scrub: auto trigger OI scrub more flexible
[fs/lustre-release.git] / lustre / osd-ldiskfs / osd_handler.c
index 0602184..3eb178b 100644 (file)
@@ -633,7 +633,11 @@ trigger:
                        if (thread_is_running(&scrub->os_thread)) {
                                result = -EINPROGRESS;
                        } else if (!dev->od_noscrub) {
-                               result = osd_scrub_start(dev);
+                               /* Since we do not know the right OI mapping,
+                                * we have to trigger OI scrub to scan the
+                                * whole device. */
+                               result = osd_scrub_start(dev, SS_AUTO_FULL |
+                                       SS_CLEAR_DRYRUN | SS_CLEAR_FAILOUT);
                                LCONSOLE_WARN("%.16s: trigger OI scrub by RPC "
                                              "for "DFID", rc = %d [1]\n",
                                              osd_name(dev), PFID(fid),result);
@@ -4159,12 +4163,13 @@ again:
        }
 
        if (!dev->od_noscrub && ++once == 1) {
-               rc = osd_scrub_start(dev);
+               rc = osd_scrub_start(dev, SS_AUTO_PARTIAL | SS_CLEAR_DRYRUN |
+                                    SS_CLEAR_FAILOUT);
                LCONSOLE_WARN("%.16s: trigger OI scrub by RPC for "DFID
                              ", rc = %d [2]\n",
                              LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name,
                              PFID(fid), rc);
-               if (rc == 0)
+               if (rc == 0 || rc == -EALREADY)
                        goto again;
        }
 
@@ -6087,6 +6092,8 @@ static int osd_device_init0(const struct lu_env *env,
        if (server_name_is_ost(o->od_svname))
                o->od_is_ost = 1;
 
+       o->od_full_scrub_ratio = OFSR_DEFAULT;
+       o->od_full_scrub_speed = FULL_SCRUB_SPEED_DEFULT;
        rc = osd_mount(env, o, cfg);
        if (rc != 0)
                GOTO(out_capa, rc);