@@ -38,6 +38,9 @@ pread_help(void)
" -Z N -- zeed the random number generator (used when reading randomly)\n"
" (heh, zorry, the -s/-S arguments were already in use in pwrite)\n"
" -V N -- use vectored IO with N iovecs of blocksize each (preadv)\n"
+#ifdef HAVE_PREADV2
+" -U -- Perform the preadv2() with RWF_DONTCACHE\n"
+#endif
"\n"
" When in \"random\" mode, the number of read operations will equal the\n"
" number required to do a complete forward/backward scan of the range.\n"
@@ -388,7 +391,7 @@ pread_f(
init_cvtnum(&fsblocksize, &fssectsize);
bsize = fsblocksize;
- while ((c = getopt(argc, argv, "b:BCFRquvV:Z:")) != EOF) {
+ while ((c = getopt(argc, argv, "b:BCFRquUvV:Z:")) != EOF) {
switch (c) {
case 'b':
tmp = cvtnum(fsblocksize, fssectsize, optarg);
@@ -417,6 +420,11 @@ pread_f(
case 'u':
uflag = 1;
break;
+#ifdef HAVE_PREADV2
+ case 'U':
+ preadv2_flags |= RWF_DONTCACHE;
+ break;
+#endif
case 'v':
vflag = 1;
break;
@@ -446,6 +454,11 @@ pread_f(
exitcode = 1;
return command_usage(&pread_cmd);
}
+ if (preadv2_flags != 0 && vectors == 0) {
+ printf(_("preadv2 flags require vectored I/O (-V)\n"));
+ exitcode = 1;
+ return command_usage(&pread_cmd);
+ }
offset = cvtnum(fsblocksize, fssectsize, argv[optind]);
if (offset < 0 && (direction & (IO_RANDOM|IO_BACKWARD))) {
@@ -514,7 +527,7 @@ pread_init(void)
pread_cmd.argmin = 2;
pread_cmd.argmax = -1;
pread_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
- pread_cmd.args = _("[-b bs] [-qv] [-i N] [-FBR [-Z N]] off len");
+ pread_cmd.args = _("[-b bs] [-qUv] [-i N] [-FBR [-Z N]] off len");
pread_cmd.oneline = _("reads a number of bytes at a specified offset");
pread_cmd.help = pread_help;
@@ -200,7 +200,7 @@ option will set the file permissions to read-write (0644). This allows xfs_io to
set up mismatches between the file permissions and the open file descriptor
read/write mode to exercise permission checks inside various syscalls.
.TP
-.BI "pread [ \-b " bsize " ] [ \-qv ] [ \-FBR [ \-Z " seed " ] ] [ \-V " vectors " ] " "offset length"
+.BI "pread [ \-b " bsize " ] [ \-qUv ] [ \-FBR [ \-Z " seed " ] ] [ \-V " vectors " ] " "offset length"
Reads a range of bytes in a specified blocksize from the given
.IR offset .
.RS 1.0i
@@ -214,6 +214,12 @@ requests will be split. The default blocksize is 4096 bytes.
.B \-q
quiet mode, do not write anything to standard output.
.TP
+.B \-U
+Perform the
+.BR preadv2 (2)
+call with
+.IR RWF_DONTCACHE .
+.TP
.B \-v
dump the contents of the buffer after reading,
by default only the count of bytes actually read is dumped.