* GPL HEADER END
*/
/*
- * Copyright (c) 2013, 2014, Intel Corporation.
+ * Copyright (c) 2013, 2015, Intel Corporation.
*/
/*
* lustre/lfsck/lfsck_bookmark.c
lfsck->li_bookmark_obj = obj;
rc = lfsck_bookmark_load(env, lfsck);
- if (rc == -ENODATA)
+ if (rc == 0) {
+ struct lfsck_bookmark *mb = &lfsck->li_bookmark_ram;
+
+ /* It is upgraded from old release, set it as
+ * LFSCK_ASYNC_WIN_DEFAULT to avoid memory pressure. */
+ if (unlikely(mb->lb_async_windows == 0)) {
+ mb->lb_async_windows = LFSCK_ASYNC_WIN_DEFAULT;
+ mutex_lock(&lfsck->li_mutex);
+ rc = lfsck_bookmark_store(env, lfsck);
+ mutex_unlock(&lfsck->li_mutex);
+ }
+ } else if (rc == -ENODATA) {
rc = lfsck_bookmark_init(env, lfsck);
+ }
RETURN(rc);
}
dirty = true;
}
+ if (bk->lb_param & LPF_DELAY_CREATE_OSTOBJ) {
+ bk->lb_param &= ~LPF_DELAY_CREATE_OSTOBJ;
+ dirty = true;
+ }
+
if (bk->lb_param & LPF_FAILOUT) {
bk->lb_param &= ~LPF_FAILOUT;
dirty = true;
dirty = true;
}
+ if ((bk->lb_param & LPF_OST_ORPHAN) &&
+ !(start->ls_flags & LPF_OST_ORPHAN)) {
+ bk->lb_param &= ~LPF_OST_ORPHAN;
+ dirty = true;
+ } else if (!(bk->lb_param & LPF_OST_ORPHAN) &&
+ (start->ls_flags & LPF_OST_ORPHAN)) {
+ bk->lb_param |= LPF_OST_ORPHAN;
+ dirty = true;
+ }
+
if ((start->ls_valid & LSV_CREATE_OSTOBJ) || reset) {
if ((bk->lb_param & LPF_CREATE_OSTOBJ) &&
- !(start->ls_valid & LSV_CREATE_OSTOBJ)) {
+ !(start->ls_flags & LPF_CREATE_OSTOBJ)) {
bk->lb_param &= ~LPF_CREATE_OSTOBJ;
dirty = true;
} else if (!(bk->lb_param & LPF_CREATE_OSTOBJ) &&
if ((start->ls_valid & LSV_CREATE_MDTOBJ) || reset) {
if ((bk->lb_param & LPF_CREATE_MDTOBJ) &&
- !(start->ls_valid & LSV_CREATE_MDTOBJ)) {
+ !(start->ls_flags & LPF_CREATE_MDTOBJ)) {
bk->lb_param &= ~LPF_CREATE_MDTOBJ;
dirty = true;
} else if (!(bk->lb_param & LPF_CREATE_MDTOBJ) &&
}
}
+ if ((start->ls_valid & LSV_DELAY_CREATE_OSTOBJ) || reset) {
+ if ((bk->lb_param & LPF_DELAY_CREATE_OSTOBJ) &&
+ !(start->ls_flags & LPF_DELAY_CREATE_OSTOBJ)) {
+ bk->lb_param &= ~LPF_DELAY_CREATE_OSTOBJ;
+ dirty = true;
+ } else if (!(bk->lb_param & LPF_DELAY_CREATE_OSTOBJ) &&
+ start->ls_flags & LPF_DELAY_CREATE_OSTOBJ) {
+ bk->lb_param |= LPF_DELAY_CREATE_OSTOBJ;
+ dirty = true;
+ }
+ }
+
if ((start->ls_valid & LSV_ERROR_HANDLE) || reset) {
if ((bk->lb_param & LPF_FAILOUT) &&
- !(start->ls_valid & LSV_ERROR_HANDLE)) {
+ !(start->ls_flags & LPF_FAILOUT)) {
bk->lb_param &= ~LPF_FAILOUT;
dirty = true;
- } else if (!(start->ls_flags & LPF_FAILOUT) &&
- (bk->lb_param & LPF_FAILOUT)) {
- bk->lb_param &= ~LPF_FAILOUT;
+ } else if (!(bk->lb_param & LPF_FAILOUT) &&
+ (start->ls_flags & LPF_FAILOUT)) {
+ bk->lb_param |= LPF_FAILOUT;
dirty = true;
}
}
if ((start->ls_valid & LSV_DRYRUN) || reset) {
if ((bk->lb_param & LPF_DRYRUN) &&
- !(start->ls_valid & LSV_DRYRUN)) {
- bk->lb_param &= ~LPF_DRYRUN;
- dirty = true;
- } else if (!(start->ls_flags & LPF_DRYRUN) &&
- (bk->lb_param & LPF_DRYRUN)) {
+ !(start->ls_flags & LPF_DRYRUN)) {
bk->lb_param &= ~LPF_DRYRUN;
lfsck->li_drop_dryrun = 1;
dirty = true;
+ } else if (!(bk->lb_param & LPF_DRYRUN) &&
+ (start->ls_flags & LPF_DRYRUN)) {
+ bk->lb_param |= LPF_DRYRUN;
+ dirty = true;
}
}
- if ((bk->lb_param & LPF_OST_ORPHAN) &&
- !(start->ls_flags & LPF_OST_ORPHAN)) {
- bk->lb_param &= ~LPF_OST_ORPHAN;
- dirty = true;
- } else if (!(bk->lb_param & LPF_OST_ORPHAN) &&
- (start->ls_flags & LPF_OST_ORPHAN)) {
- bk->lb_param |= LPF_OST_ORPHAN;
- dirty = true;
- }
-
if (start->ls_valid & LSV_SPEED_LIMIT) {
if (__lfsck_set_speed(lfsck, start->ls_speed_limit))
dirty = true;
}
if (start->ls_valid & LSV_ASYNC_WINDOWS) {
+ if (start->ls_async_windows < 1)
+ return -EINVAL;
+
if (bk->lb_async_windows != start->ls_async_windows) {
bk->lb_async_windows = start->ls_async_windows;
dirty = true;