Fadvise

Merge #2988  & #2964 into together. And add test case.
 @liewegas , bypass make check & plz review. Thanks!
@jdurgin . flags mean can use multi enum items. In this case enum1 |enum2|..., it don't the enum item.  In my test case, i don't see any error or warning.Or am i miss something?