X-Git-Url: http://git.apps.os.sepia.ceph.com/?p=xfstests-dev.git;a=blobdiff_plain;f=ltp%2Fdoio.c;h=966cff1d75dc85fda695ca2f7c78ccc1fb293dab;hp=b4d21da2b6ccdee15c14c6b76487da0f73b0f53f;hb=4544179a64dcdef96b59c072baf3ef33e1b211fc;hpb=131f750d7db38c7260b93e659d94fa7e4ea07ce0 diff --git a/ltp/doio.c b/ltp/doio.c index b4d21da2..966cff1d 100644 --- a/ltp/doio.c +++ b/ltp/doio.c @@ -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;