Whamcloud - gitweb
LU-4554 lfsck: old single-OI MDT always scrubbed 67/9067/1
authorNed Bass <bass6@llnl.gov>
Thu, 30 Jan 2014 22:56:20 +0000 (14:56 -0800)
committerNed Bass <bass6@llnl.gov>
Thu, 30 Jan 2014 23:14:18 +0000 (15:14 -0800)
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

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,