@andreykiselev this would seem to cause the problem Micron/with/bad/blocks users are seeing:
https://bugs.openwrt.org/index.php?do=details&task_id=1926
my guess is that the controller isn't consistent... it does shift_on_bbt when writing, but when reading it just reads directly (without shifting).... that's one guess (without having looked at the code really)... another guess would be that xiaomi stock is doing "shift" but openwrt isn't doing it in the same way... although, i need to actually verify that this is what's happening 
and i'm not 100% convinced that the solution (don't shift_on_bbt) is the correct one in all cases... makes sense for UBI but not so much for raw partitions (such as "kernel")....