Whamcloud - gitweb
LU-4554 lfsck: old single-OI MDT always scrubbed 67/9067/2
authorNed Bass <bass6@llnl.gov>
Thu, 30 Jan 2014 22:56:20 +0000 (14:56 -0800)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 10 Feb 2014 16:01:49 +0000 (16:01 +0000)
Old ldiskfs MDT's that contain a single OI container named "oi.16"
trigger an automatic OI scrub on each restart.  This is because
osd_oi_table_open() gets ENOENT opening "oi.16.0" and consequently
sets bit 0 in scrub_file::sf_oi_bitmap.  This bit indicates the OI
container 0 needs to be recreated, and it triggers a scrub in
osd_fid_lookup() for lookups that fail with ENOENT.  Fix this by
clearing the bit in osd_oi_init() after a successful open of
"oi.16".

Signed-off-by: Ned Bass <bass6@llnl.gov>
Change-Id: Ie69223d3f8289c90de46f9afe0a2de0e0625b0f6
Reviewed-on: http://review.whamcloud.com/9067
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: James Nunez <james.a.nunez@intel.com>
Reviewed-by: Fan Yong <fan.yong@intel.com>
lustre/osd-ldiskfs/osd_oi.c

index 6e690be..b4bfb9a 100644 (file)
@@ -368,6 +368,7 @@ int osd_oi_init(struct osd_thread_info *info, struct osd_device *osd)
        /* if previous failed then try found single OI from old filesystem */
        rc = osd_oi_open(info, osd, OSD_OI_NAME_BASE, &oi[0], false);
        if (rc == 0) { /* found single OI from old filesystem */
+               ldiskfs_clear_bit(0, sf->sf_oi_bitmap);
                if (sf->sf_success_count == 0)
                        /* XXX: There is one corner case that if the OI_scrub
                         *      file crashed or lost and we regard it upgrade,