extern void *buffer;
extern size_t buffersize;
-extern int align_direct(off64_t *, long long *);
extern int alloc_buffer(size_t, int, unsigned int);
extern int read_buffer(int, off64_t, long long, long long *,
int, int);
}
}
-int
-align_direct(
- off64_t *offset,
- long long *count)
-{
- struct dioattr dio;
- unsigned int align;
-
- if (!(file->flags & IO_DIRECT))
- return 0;
-
- if (file->flags & IO_FOREIGN) {
- dio.d_miniosz = BBSIZE; /* punt */
- } else if ((xfsctl(file->name, file->fd, XFS_IOC_DIOINFO, &dio)) < 0) {
- perror("XFS_IOC_DIOINFO");
- return 1;
- }
-
- align = (*offset % dio.d_miniosz);
- if (align) {
- *offset -= align;
- *count += align;
- }
- align = (*count % dio.d_miniosz);
- if (align) {
- *count += (dio.d_miniosz - align);
- }
- return 0;
-}
-
static int
read_random(
int fd,
if (alloc_buffer(bsize, uflag, 0xabababab) < 0)
return 0;
- if (align_direct(&offset, &count) < 0)
- return 0;
gettimeofday(&t1, NULL);
switch (direction) {
if (alloc_buffer(bsize, uflag, seed) < 0)
return 0;
- if (align_direct(&offset, &count) < 0)
- return 0;
c = IO_READONLY | (dflag ? IO_DIRECT : 0);
if (infile && ((fd = openfile(infile, NULL, c, 0)) < 0))
tdiv((double)total, t2), tdiv((double)c, t2));
}
done:
- close(fd);
+ if (infile)
+ close(fd);
return 0;
}