I think we have a problem with inheritance in the following patch
http://review.whamcloud.com/#/c/19041/23/lustre/lod/lod_object.c,unified
from LU-7660
The problem code is below:
3117 +»
3118 +» if (d->lod_md_root != NULL &&
3119 +» (lc->ldo_stripenr == 0 ||
3120 +» lc->ldo_stripe_size == 0 ||
3121 +» lc->ldo_stripe_offset == LOV_OFFSET_DEFAULT ||
3122 +» lc->ldo_pool == NULL)) {
3123 +» » memset(lds, 0, sizeof(*lds));
3124 +» » lod_get_default_lov_striping(env, d->lod_md_root, lds);
3125 +» » lod_striping_from_default(lc, lds, child_mode);
3126 +» }
while it is correct about stripe number, count and offset checks, it is not correct about pool check. Since pool is optional value, it is not right to ignore parent layout just because it has no pool.
For example, I set some striping on the directory and expect all files/subdirs inside to have the same striping, but in fact that will not work, striping will be taken from fs root. Moreover, default fs striping may have no pool as well but still be used prior the parent striping.
I've encountered such problem while porting DoM patches, because it is quite visible when DOM layout is used or not as expected