Modify rawio(1) to work with GEOM by losing the multiple-open(2)
semantics. As GEOM prevents actual concurrent accesses that are
deemed generally unsafe. As we know, as a rawio(1) user, that we
are intending to do something ostensibly unsafe, we can use a single
open(2) shared among the worker children and then use pread(2) and
pwrite(2) instead of read(2), write(2) and lseek(2). This properly
bypasses the sanity checks GEOM makes for concurrent access.
Additionally, sector size isn't and hasn't ever been necessarily 512
(or a multiple thereof), but we don't have many classical examples
of devices not the common case that we'd test rawio(1) with. In my
particular case, I'm using graid3(8) and have an effective sector size
of 1024. The program now attempts to use DIOCGSECTORSIZE to find
the correct base for a device and thus Works For Me.
Cursory review by: MAINTAINER