This will make the compiler complain about unreachable code and the 'fallback' label being unused.  I think you can rewrite the error checking logic in all three cases to something like this:

```c
if (r != -1)
  return r;
if (errno != EINVAL)
  return -errno;
/* Fall through. */
```