do_preadv(
int fd,
off_t offset,
- long long count)
+ long long count,
+ int preadv2_flags)
{
int vecs = 0;
ssize_t oldlen = 0;
} else {
vecs = vectors;
}
+#ifdef HAVE_PREADV2
+ if (preadv2_flags)
+ bytes = preadv2(fd, iov, vectors, offset, preadv2_flags);
+ else
+ bytes = preadv(fd, iov, vectors, offset);
+#else
bytes = preadv(fd, iov, vectors, offset);
-
+#endif
/* restore trimmed iov */
if (oldlen)
iov[vecs - 1].iov_len = oldlen;
int fd,
off_t offset,
long long count,
- size_t buffer_size)
+ size_t buffer_size,
+ int preadv2_flags)
{
if (!vectors)
return pread(fd, io_buffer, min(count, buffer_size), offset);
- return do_preadv(fd, offset, count);
+ return do_preadv(fd, offset, count, preadv2_flags);
}
static int
long long count,
long long *total,
unsigned int seed,
- int eof)
+ int eof,
+ int preadv2_flags)
{
off_t end, off, range;
ssize_t bytes;
io_buffersize;
else
off = offset;
- bytes = do_pread(fd, off, io_buffersize, io_buffersize);
+ bytes = do_pread(fd, off, io_buffersize, io_buffersize, preadv2_flags);
if (bytes == 0)
break;
if (bytes < 0) {
off_t *offset,
long long *count,
long long *total,
- int eof)
+ int eof,
+ int preadv2_flags)
{
off_t end, off = *offset;
ssize_t bytes = 0, bytes_requested;
/* Do initial unaligned read if needed */
if ((bytes_requested = (off % io_buffersize))) {
off -= bytes_requested;
- bytes = do_pread(fd, off, bytes_requested, io_buffersize);
+ bytes = do_pread(fd, off, bytes_requested, io_buffersize, preadv2_flags);
if (bytes == 0)
return ops;
if (bytes < 0) {
while (cnt > end) {
bytes_requested = min(cnt, io_buffersize);
off -= bytes_requested;
- bytes = do_pread(fd, off, cnt, io_buffersize);
+ bytes = do_pread(fd, off, cnt, io_buffersize, preadv2_flags);
if (bytes == 0)
break;
if (bytes < 0) {
long long *total,
int verbose,
int onlyone,
- int eof)
+ int eof,
+ int preadv2_flags)
{
ssize_t bytes;
int ops = 0;
*total = 0;
while (count > 0 || eof) {
- bytes = do_pread(fd, offset, count, io_buffersize);
+ bytes = do_pread(fd, offset, count, io_buffersize, preadv2_flags);
if (bytes == 0)
break;
if (bytes < 0) {
int verbose,
int onlyone)
{
- return read_forward(fd, offset, count, total, verbose, onlyone, 0);
+ return read_forward(fd, offset, count, total, verbose, onlyone, 0, 0);
}
static int
int Cflag, qflag, uflag, vflag;
int eof = 0, direction = IO_FORWARD;
int c;
+ int preadv2_flags = 0;
Cflag = qflag = uflag = vflag = 0;
init_cvtnum(&fsblocksize, &fssectsize);
case IO_RANDOM:
if (!zeed) /* srandom seed */
zeed = time(NULL);
- c = read_random(file->fd, offset, count, &total, zeed, eof);
+ c = read_random(file->fd, offset, count, &total, zeed, eof,
+ preadv2_flags);
break;
case IO_FORWARD:
- c = read_forward(file->fd, offset, count, &total, vflag, 0, eof);
+ c = read_forward(file->fd, offset, count, &total, vflag, 0, eof,
+ preadv2_flags);
if (eof)
count = total;
break;
case IO_BACKWARD:
- c = read_backward(file->fd, &offset, &count, &total, eof);
+ c = read_backward(file->fd, &offset, &count, &total, eof,
+ preadv2_flags);
break;
default:
ASSERT(0);