Details
-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
None
-
3
-
9223372036854775807
Description
the client doesn't set OBD_MD_LAYOUT_VERSION if current layout version is 0
if (io->ci_layout_version > 0) { /* verify layout version */ oa->o_valid |= OBD_MD_LAYOUT_VERSION;
then OST just skips layout version check:
/* need to verify layout version */ if (oa->o_valid & OBD_MD_LAYOUT_VERSION) { rc = ofd_verify_layout_version(env, fo, oa);
all regular layouts are created with version 0, meaning that if client doesn't notice layout change for a reason (LU-15300 or eviction from MDS), then OST won't check version even if it's changed and propagated to OST already. this can result in silent data corruption.