Skip to content
Snippets Groups Projects
Commit 01fb4edf authored by Fan Yong's avatar Fan Yong Committed by Oleg Drokin
Browse files

LU-10773 obdclass: yield cpu during changelog_block_trim_ext


To avoid soft-lockup if there are too many records to be handled.
The patch also filters out zero-sized records to avoid dead loop.

Signed-off-by: default avatarFan Yong <fan.yong@intel.com>
Change-Id: Ia094f9153b5ef2602103d2ee13ee7ad3ffe6dc4f
Reviewed-on: https://review.whamcloud.com/31516


Tested-by: Jenkins
Tested-by: default avatarMaloo <hpdd-maloo@intel.com>
Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Reviewed-by: default avatarMike Pershin <mike.pershin@intel.com>
Reviewed-by: default avatarOleg Drokin <oleg.drokin@intel.com>
parent 196855e1
No related branches found
No related tags found
No related merge requests found
...@@ -822,8 +822,26 @@ static void changelog_block_trim_ext(struct llog_rec_hdr *hdr, ...@@ -822,8 +822,26 @@ static void changelog_block_trim_ext(struct llog_rec_hdr *hdr,
extra_flags; extra_flags;
} }
if (unlikely(hdr->lrh_len == 0)) {
/* It is corruption case, we cannot know the next rec,
* jump to the last one directly to avoid dead loop. */
LCONSOLE(D_WARNING, "Hit invalid llog record: "
"idx %u, type %u, id %u\n",
hdr->lrh_index, hdr->lrh_type, hdr->lrh_id);
hdr = llog_rec_hdr_next(last_hdr);
if (unlikely(hdr == last_hdr))
LCONSOLE(D_WARNING, "The last record crashed: "
"idx %u, type %u, id %u\n",
hdr->lrh_index, hdr->lrh_type,
hdr->lrh_id);
break;
}
changelog_remap_rec(rec, rec->cr_flags & flags, xflag); changelog_remap_rec(rec, rec->cr_flags & flags, xflag);
hdr = llog_rec_hdr_next(hdr); hdr = llog_rec_hdr_next(hdr);
/* Yield CPU to avoid soft-lockup if there are too many records
* to be handled. */
cond_resched();
} while ((char *)hdr <= (char *)last_hdr); } while ((char *)hdr <= (char *)last_hdr);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment