fsstress: translate flags in fiemap_f
[xfstests-dev.git] / ltp / doio.c
index b4d21da2b6ccdee15c14c6b76487da0f73b0f53f..966cff1d75dc85fda695ca2f7c78ccc1fb293dab 100644 (file)
@@ -210,15 +210,16 @@ void      sigbus_handler();       /* Handle sigbus--check active_mmap_rw to
 
 void   cb_handler();           /* Posix aio callback handler. */
 void   noop_handler();         /* Delayop alarm, does nothing. */
-char   *hms();
+char   *hms(time_t  t);
 char   *format_rw();
 char   *format_sds();
 char   *format_listio();
-char   *check_file();
+char   *check_file(char *file, int offset, int length, char *pattern,
+                   int pattern_length, int patshift, int fsa);
 int    doio_fprintf(FILE *stream, char *format, ...);
-void   doio_upanic();
+void   doio_upanic(int mask);
 void   doio();
-void   help();
+void   help(FILE *stream);
 void   doio_delay();
 int     alloc_fd( char *, int );
 int     alloc_mem( int );
@@ -1145,7 +1146,6 @@ struct io_req     *req;
        static int              pid = -1;
        int                     fd, nbytes, oflags;
        /* REFERENCED */
-       int                     signo;
        int                     logged_write, rval, got_lock;
        long                    offset, woffset = 0;
        char                    *addr, pattern, *file, *msg;
@@ -1156,7 +1156,6 @@ struct io_req     *req;
         * Misc variable setup
         */
 
-       signo   = 0;
        nbytes  = req->r_data.write.r_nbytes;
        offset  = req->r_data.write.r_offset;
        pattern = req->r_data.write.r_pattern;
@@ -1472,6 +1471,7 @@ fmt_ioreq(struct io_req *ioreq, struct syscall_info *sy, int fd)
                      (io->r_uflags & F_WORD_ALIGNED) ? "aligned" : "unaligned");
 
        if(io->r_oflags & O_DIRECT) {
+               char            *dio_env;
                struct dioattr  finfo;
                
                if(xfsctl(io->r_file, fd, XFS_IOC_DIOINFO, &finfo) == -1) {
@@ -1482,6 +1482,10 @@ fmt_ioreq(struct io_req *ioreq, struct syscall_info *sy, int fd)
                        finfo.d_maxiosz = 1;
                }
 
+               dio_env = getenv("XFS_DIO_MIN");
+               if (dio_env)
+                       finfo.d_mem = finfo.d_miniosz = atoi(dio_env);
+
                cp += sprintf(cp, "          DIRECT I/O: offset %% %d = %d length %% %d = %d\n",
                              finfo.d_miniosz,
                              io->r_offset % finfo.d_miniosz,
@@ -1566,28 +1570,6 @@ fmt_pread(struct io_req *req, struct syscall_info *sy, int fd, char *addr)
        return(errbuf);
 }
 
-struct status *
-sy_readv(req, sysc, fd, addr)
-struct io_req  *req;
-struct syscall_info *sysc;
-int fd;
-char *addr;
-{
-       struct status *sy_rwv();
-       return sy_rwv(req, sysc, fd, addr, 0);
-}
-
-struct status *
-sy_writev(req, sysc, fd, addr)
-struct io_req  *req;
-struct syscall_info *sysc;
-int fd;
-char *addr;
-{
-       struct status *sy_rwv();
-       return sy_rwv(req, sysc, fd, addr, 1);
-}
-
 struct status *
 sy_rwv(req, sysc, fd, addr, rw)
 struct io_req  *req;
@@ -1628,38 +1610,36 @@ int rw;
        return(status);
 }
 
-char *
-fmt_readv(struct io_req *req, struct syscall_info *sy, int fd, char *addr)
-{
-       static char     errbuf[32768];
-       char            *cp;
-
-       cp = errbuf;
-       cp += sprintf(cp, "syscall:  %s(%d, (iov on stack), 1)\n",
-                     sy->sy_name, fd);
-       return(errbuf);
-}
-
 struct status *
-sy_mmread(req, sysc, fd, addr)
-struct io_req *req;
+sy_readv(req, sysc, fd, addr)
+struct io_req  *req;
 struct syscall_info *sysc;
 int fd;
 char *addr;
 {
-       struct status *sy_mmrw();
-       return sy_mmrw(req, sysc, fd, addr, 0);
+       return sy_rwv(req, sysc, fd, addr, 0);
 }
 
 struct status *
-sy_mmwrite(req, sysc, fd, addr)
-struct io_req *req;
+sy_writev(req, sysc, fd, addr)
+struct io_req  *req;
 struct syscall_info *sysc;
 int fd;
 char *addr;
 {
-       struct status *sy_mmrw();
-       return sy_mmrw(req, sysc, fd, addr, 1);
+       return sy_rwv(req, sysc, fd, addr, 1);
+}
+
+char *
+fmt_readv(struct io_req *req, struct syscall_info *sy, int fd, char *addr)
+{
+       static char     errbuf[32768];
+       char            *cp;
+
+       cp = errbuf;
+       cp += sprintf(cp, "syscall:  %s(%d, (iov on stack), 1)\n",
+                     sy->sy_name, fd);
+       return(errbuf);
 }
 
 struct status *
@@ -1728,6 +1708,26 @@ int rw;
        return(status);
 }
 
+struct status *
+sy_mmread(req, sysc, fd, addr)
+struct io_req *req;
+struct syscall_info *sysc;
+int fd;
+char *addr;
+{
+       return sy_mmrw(req, sysc, fd, addr, 0);
+}
+
+struct status *
+sy_mmwrite(req, sysc, fd, addr)
+struct io_req *req;
+struct syscall_info *sysc;
+int fd;
+char *addr;
+{
+       return sy_mmrw(req, sysc, fd, addr, 1);
+}
+
 char *
 fmt_mmrw(struct io_req *req, struct syscall_info *sy, int fd, char *addr)
 {
@@ -2779,11 +2779,18 @@ int     oflags;
        free_slot->c_rtc = Reqno;
 
        if (oflags & O_DIRECT) {
+               char *dio_env;
+
                if (xfsctl(file, fd, XFS_IOC_DIOINFO, &finfo) == -1) {
                        finfo.d_mem = 1;
                        finfo.d_miniosz = 1;
                        finfo.d_maxiosz = 1;
                }
+
+               dio_env = getenv("XFS_DIO_MIN");
+               if (dio_env)
+                       finfo.d_mem = finfo.d_miniosz = atoi(dio_env);
+
        } else {
                finfo.d_mem = 1;
                finfo.d_miniosz = 1;