losetup: directly set dio instead of afterwards
This avoids an extra syscall, and allows the kernel to automatically set
block size [0], avoiding unnecessary failure with 4096-byte devices.
This changes the observable behavior of losetup --direct-io in the case
where DIO is not supported to fully fail, instead of creating a
non-direct-io device. If the user explicitly specifies --direct-io, then
they should get either a DIO loopdev or no loopdev, not a non-DIO
loopdev and a misleading error.
Additionally, loopcxt_setup_device now uses O_CLOEXEC in the read-only
fallback.
[0] https://github.com/torvalds/linux/commit/
85560117d00f5d528e928918b8f61cadcefff98b