Whamcloud - gitweb
LU-2142 scrub: reset completed scrub position if retrigger
authorFan Yong <yong.fan@whamcloud.com>
Thu, 11 Oct 2012 11:19:28 +0000 (19:19 +0800)
committerOleg Drokin <green@whamcloud.com>
Fri, 12 Oct 2012 21:53:56 +0000 (17:53 -0400)
If former OI scrub has been completed, and the user wants to run
the OI scrub again, then reset the OI scrub to make it to rescan
the device from the beginning.

Signed-off-by: Fan Yong <yong.fan@whamcloud.com>
Change-Id: I9b067f50df81461702c7f3db0eadd2bf3ebf5699
Reviewed-on: http://review.whamcloud.com/4252
Tested-by: Hudson
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Bobi Jam <bobijam@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
lustre/osd-ldiskfs/osd_scrub.c

index 8f57596..f532f5a 100644 (file)
@@ -955,6 +955,9 @@ again:
        }
        cfs_spin_unlock(&scrub->os_lock);
 
+       if (scrub->os_file.sf_status == SS_COMPLETED)
+               flags |= SS_RESET;
+
        scrub->os_start_flags = flags;
        thread_set_flags(thread, 0);
        rc = cfs_create_thread(osd_scrub_main, dev, 0);
@@ -973,16 +976,12 @@ again:
 
 int osd_scrub_start(struct osd_device *dev)
 {
-       __u32 flags = SS_AUTO;
-       int   rc;
+       int rc;
        ENTRY;
 
-       if (dev->od_scrub.os_file.sf_status == SS_COMPLETED)
-               flags |= SS_RESET;
-
        /* od_otable_mutex: prevent curcurrent start/stop */
        cfs_mutex_lock(&dev->od_otable_mutex);
-       rc = do_osd_scrub_start(dev, flags);
+       rc = do_osd_scrub_start(dev, SS_AUTO);
        cfs_mutex_unlock(&dev->od_otable_mutex);
 
        RETURN(rc == -EALREADY ? 0 : rc);