For ioctl(SG_SET_RESERVED_SIZE) the value will be used to
request a new reserved buffer of that size. The previous reserved buffer
is freed (if it is not in use; if it was in use then the ioctl() fails and
EBUSY is placed in errno).
A new reserved buffer is then allocated and its actual size can be found by
calling the ioctl(SG_GET_RESERVED_SIZE). The reserved buffer is then used
for DMA purposes by subsequent write() and ioctl(SG_IO) commands if it is
not already in use and if the write() is not calling for a buffer size
larger than that reserved. The reserved buffer may well be a series of
kernel buffers if the adapter supports scatter-gather. Large buffers can
be requested (e.g. 4 MB) but not necessarily granted. Once a mmap() call
has been made on a sg file descriptor, subsequent calls to this ioctl()
will fail with EBUSY placed in errno.
In the case of ioctl(SG_GET_RESERVED_SIZE) the size in bytes of
the reserved buffer from open() or the most recent SG_SET_RESERVED_SIZE
ioctl() call on this fd. The result can be 0 if memory is very tight. In
this case it may not be wise to attempt something like burning a CD on
this file descriptor.