4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License version 2 for more details. A copy is
14 * included in the COPYING file that accompanied this code.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 * Copyright (c) 2012, 2014, Intel Corporation.
26 * lustre/osd-ldiskfs/osd_scrub.h
28 * Shared definitions and declarations for OI scrub.
30 * Author: Fan Yong <yong.fan@whamcloud.com>
38 #define SCRUB_MAGIC_V1 0x4C5FD252
39 #define SCRUB_CHECKPOINT_INTERVAL 60
40 #define SCRUB_OI_BITMAP_SIZE (OSD_OI_FID_NR_MAX >> 3)
41 #define SCRUB_WINDOW_SIZE 1024
44 /* The scrub file is new created, for new MDT, upgrading from old disk,
45 * or re-creating the scrub file manually. */
48 /* The scrub is checking/repairing the OI files. */
51 /* The scrub checked/repaired the OI files successfully. */
54 /* The scrub failed to check/repair the OI files. */
57 /* The scrub is stopped manually, the OI files may be inconsistent. */
60 /* The scrub is paused automatically when umount. */
63 /* The scrub crashed during the scanning, should be restarted. */
68 /* OI files have been recreated, OI mappings should be re-inserted. */
69 SF_RECREATED = 0x0000000000000001ULL,
71 /* OI files are invalid, should be rebuild ASAP */
72 SF_INCONSISTENT = 0x0000000000000002ULL,
74 /* OI scrub is triggered automatically. */
75 SF_AUTO = 0x0000000000000004ULL,
77 /* The device is upgraded from 1.8 format. */
78 SF_UPGRADE = 0x0000000000000008ULL,
85 /* Check only without repairing. */
90 /* Set failout flag. */
91 SS_SET_FAILOUT = 0x00000001,
93 /* Clear failout flag. */
94 SS_CLEAR_FAILOUT = 0x00000002,
96 /* Reset scrub start position. */
97 SS_RESET = 0x00000004,
99 /* Trigger full scrub automatically. */
100 SS_AUTO_FULL = 0x00000008,
102 /* Trigger partial scrub automatically. */
103 SS_AUTO_PARTIAL = 0x00000010,
105 /* Set dryrun flag. */
106 SS_SET_DRYRUN = 0x00000020,
108 /* Clear dryrun flag. */
109 SS_CLEAR_DRYRUN = 0x00000040,
112 /* The flags here are only used inside OSD, NOT be visible by dump(). */
113 enum scrub_internal_flags {
114 /* This is a new formatted device. */
115 SIF_NO_HANDLE_OLD_FID = 0x0001,
119 /* 128-bit uuid for volume. */
122 /* See 'enum scrub_flags'. */
125 /* The scrub magic. */
128 /* See 'enum scrub_status'. */
131 /* See 'enum scrub_param'. */
134 /* The time for the last OI scrub completed. */
135 __u64 sf_time_last_complete;
137 /* The time for the latest OI scrub ran. */
138 __u64 sf_time_latest_start;
140 /* The time for the last OI scrub checkpoint. */
141 __u64 sf_time_last_checkpoint;
143 /* The position for the latest OI scrub started from. */
144 __u64 sf_pos_latest_start;
146 /* The position for the last OI scrub checkpoint. */
147 __u64 sf_pos_last_checkpoint;
149 /* The position for the first should be updated object. */
150 __u64 sf_pos_first_inconsistent;
152 /* How many objects have been checked. */
153 __u64 sf_items_checked;
155 /* How many objects have been updated. */
156 __u64 sf_items_updated;
158 /* How many objects failed to be processed. */
159 __u64 sf_items_failed;
161 /* How many prior objects have been updated during scanning. */
162 __u64 sf_items_updated_prior;
164 /* How many objects marked as LDISKFS_STATE_LUSTRE_NOSCRUB. */
165 __u64 sf_items_noscrub;
167 /* How many IGIF objects. */
170 /* How long the OI scrub has run. */
173 /* How many completed OI scrub ran on the device. */
174 __u32 sf_success_count;
176 /* How many OI files. */
179 /* Keep the flags after scrub reset. See 'enum scrub_internal_flags' */
180 __u16 sf_internal_flags;
183 __u64 sf_reserved_2[16];
185 /* Bitmap for OI files recreated case. */
186 __u8 sf_oi_bitmap[SCRUB_OI_BITMAP_SIZE];
189 struct osd_iit_param {
190 struct super_block *sb;
191 struct buffer_head *bitmap;
199 struct lvfs_run_ctxt os_ctxt;
200 struct ptlrpc_thread os_thread;
201 struct osd_idmap_cache os_oic;
202 struct osd_iit_param os_iit_param;
203 struct list_head os_inconsistent_items;
205 /* write lock for scrub prep/update/post/checkpoint,
206 * read lock for scrub dump. */
207 struct rw_semaphore os_rwsem;
210 /* Scrub file in memory. */
211 struct scrub_file os_file;
213 /* Buffer for scrub file load/store. */
214 struct scrub_file os_file_disk;
216 /* Inode for the scrub file. */
217 struct inode *os_inode;
219 /* The time for last checkpoint, jiffies */
220 cfs_time_t os_time_last_checkpoint;
222 /* The time for next checkpoint, jiffies */
223 cfs_time_t os_time_next_checkpoint;
225 /* statistics for /lost+found are in ram only, it will be reset
226 * when each time the device remount. */
228 /* How many objects have been scanned during initial OI scrub. */
230 /* How many objects have been repaired during initial OI scrub. */
231 __u64 os_lf_repaired;
232 /* How many objects failed to be processed during initial OI scrub. */
235 /* How many objects have been checked since last checkpoint. */
236 __u32 os_new_checked;
237 __u32 os_pos_current;
238 __u32 os_start_flags;
239 unsigned int os_in_prior:1, /* process inconsistent item
240 * found by RPC prior */
241 os_waiting:1, /* Waiting for scan window. */
242 os_full_speed:1, /* run w/o speed limit */
243 os_paused:1, /* The scrub is paused. */
248 __u64 os_bad_oimap_count;
249 __u64 os_bad_oimap_time;
252 #endif /* _OSD_SCRUB_H */