We don't generally handle MIG_BAD_ID. That error indicates a server not implementing the protocol for which it's being used, which is a server bug. If anything, we'd translate that to EGRATUITOUS in the general case, and perhaps to EOPNOTSUPP in particular cases where it's not an ironclad part of the interface contract that it implement the particular protocol. So I think we should separate the MIG_BAD_ID case and treat it more generally, if at all.
Since it's the norm for servers to return EOPNOTSUPP for miscellaneous RPCs they aren't implementing, translating that to EINVAL for fsync/fdatasync is reasonable. It should have a comment saying that POSIX.1 specifies EINVAL for a file descriptor on which sync is not supported. Thanks, Roland