Details
-
Bug
-
Resolution: Fixed
-
Minor
-
Lustre 2.2.0, Lustre 2.1.1
-
None
-
3
-
4543
Description
It seems my async journal code for 2.0 port had a bug in it regarding recovery.
When the object is not created we try to recreate it, but we also need to set a recreate flag.
The solution is something like this. In filter_preprw_write:
if (oa == NULL) { OBDO_ALLOC(noa); if (noa == NULL) GOTO(recreate_out, rc = -ENOMEM); noa->o_id = obj->ioo_id; noa->o_valid = OBD_MD_FLID; } + if ((oa->o_valid & OBD_MD_FLFLAGS) == 0) { + oa->o_valid |= OBD_MD_FLFLAGS; + oa->o_flags = OBD_FL_RECREATE_OBJS; + } else { + oa->o_flags |= OBD_FL_RECREATE_OBJS; + } if (filter_create(exp, noa, NULL, oti) == 0) {
Without it we always end up in precreate code that tries to allocate multiple objects and if we happen to allocate below last_id (which should be pretty rare I guess? I cannot come with any very plausible scenarios, but it does happen apparently), this assertion triggers as the result.
Attachments
Issue Links
- is related to
-
LU-1121 recovery-mds-scale (FLAVOR=OSS): tar: Wrote only 4096 of 7168 bytes
- Closed
- Trackbacks
-
Lustre 2.1.1 release testing tracker Lustre 2.1.1 RC4 Tag: v2110RC4 Build:
-
Changelog 2.1 Changes from version 2.1.2 to version 2.1.3 Server support for kernels: 2.6.18308.13.1.el5 (RHEL5) 2.6.32279.2.1.el6 (RHEL6) Client support for unpatched kernels: 2.6.18308.13.1.el5 (RHEL5) 2.6.32279.2.1....