The mmap() system call can be made multiple times on the same sg_fd.
The munmap() system call is not required if close() is called on
sg_fd. Mmap-ed IO is well-behaved when a process is fork()-ed
(or the equivalent finer grained clone() system call is made).
In the case of a fork(), 2 processes will be sharing the same memory mapped
area together with the sg driver for a sg_fd and the last one to
close the sg_fd (or exit) will cause the shared memory to be freed.
It is assumed that if the default reserved buffer size of 32 KB is
not sufficient then a ioctl(SG_SET_RESERVED_SIZE) call is made
prior to any calls to mmap(). If the required size is not a multiple
of the kernel's page size (returned by getpagesize() system call) then
the size passed to ioctl(SG_SET_RESERVED_SIZE) should be rounded up
to the next page size multiple.
Mmap-ed IO is requested by setting (or or-ing in) the SG_FLAG_MMAP_IO
constant into the flag member of the the sg_io_hdr structure prior to
a call to write() or ioctl(SG_IO). The logic to do mmap-ed IO _assumes_
that an appropriate mmap() call has been made by the application. In
other words it does not check.
[1]