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....