|
|
|
@ -411,7 +411,7 @@ int freq_table_size;
|
|
|
|
|
char *homedir;
|
|
|
|
|
int *ilist;
|
|
|
|
|
int ilistlen;
|
|
|
|
|
off64_t maxfsize;
|
|
|
|
|
off_t maxfsize;
|
|
|
|
|
char *myprog;
|
|
|
|
|
int namerand;
|
|
|
|
|
int nameseq;
|
|
|
|
@ -458,7 +458,7 @@ int get_fname(int, long, pathname_t *, flist_t **, fent_t **, int *);
|
|
|
|
|
void init_pathname(pathname_t *);
|
|
|
|
|
int lchown_path(pathname_t *, uid_t, gid_t);
|
|
|
|
|
int link_path(pathname_t *, pathname_t *);
|
|
|
|
|
int lstat64_path(pathname_t *, struct stat64 *);
|
|
|
|
|
int lstat_path(pathname_t *, struct stat *);
|
|
|
|
|
void make_freq_table(void);
|
|
|
|
|
int mkdir_path(pathname_t *, mode_t);
|
|
|
|
|
int mknod_path(pathname_t *, mode_t, dev_t);
|
|
|
|
@ -472,9 +472,9 @@ int rename_path(pathname_t *, pathname_t *, int);
|
|
|
|
|
int rmdir_path(pathname_t *);
|
|
|
|
|
void separate_pathname(pathname_t *, char *, pathname_t *);
|
|
|
|
|
void show_ops(int, char *);
|
|
|
|
|
int stat64_path(pathname_t *, struct stat64 *);
|
|
|
|
|
int stat_path(pathname_t *, struct stat *);
|
|
|
|
|
int symlink_path(const char *, pathname_t *);
|
|
|
|
|
int truncate64_path(pathname_t *, off64_t);
|
|
|
|
|
int truncate64_path(pathname_t *, off_t);
|
|
|
|
|
int unlink_path(pathname_t *);
|
|
|
|
|
void usage(void);
|
|
|
|
|
void write_freq(void);
|
|
|
|
@ -662,10 +662,10 @@ int main(int argc, char **argv)
|
|
|
|
|
}
|
|
|
|
|
sprintf(buf, "fss%x", (unsigned int)getpid());
|
|
|
|
|
fd = creat(buf, 0666);
|
|
|
|
|
if (lseek64(fd, (off64_t)(MAXFSIZE32 + 1ULL), SEEK_SET) < 0)
|
|
|
|
|
maxfsize = (off64_t)MAXFSIZE32;
|
|
|
|
|
if (lseek64(fd, (off_t)(MAXFSIZE32 + 1ULL), SEEK_SET) < 0)
|
|
|
|
|
maxfsize = (off_t)MAXFSIZE32;
|
|
|
|
|
else
|
|
|
|
|
maxfsize = (off64_t)MAXFSIZE;
|
|
|
|
|
maxfsize = (off_t)MAXFSIZE;
|
|
|
|
|
make_freq_table();
|
|
|
|
|
dcache_init();
|
|
|
|
|
setlinebuf(stdout);
|
|
|
|
@ -998,12 +998,12 @@ void
|
|
|
|
|
check_cwd(void)
|
|
|
|
|
{
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
struct stat64 statbuf;
|
|
|
|
|
struct stat statbuf;
|
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
|
|
ret = stat64(".", &statbuf);
|
|
|
|
|
ret = stat(".", &statbuf);
|
|
|
|
|
if (ret != 0) {
|
|
|
|
|
fprintf(stderr, "fsstress: check_cwd stat64() returned %d with errno: %d (%m)\n",
|
|
|
|
|
fprintf(stderr, "fsstress: check_cwd stat() returned %d with errno: %d (%m)\n",
|
|
|
|
|
ret, errno);
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
@ -1171,7 +1171,7 @@ again:
|
|
|
|
|
void
|
|
|
|
|
doproc(void)
|
|
|
|
|
{
|
|
|
|
|
struct stat64 statbuf;
|
|
|
|
|
struct stat statbuf;
|
|
|
|
|
char buf[10];
|
|
|
|
|
char cmd[64];
|
|
|
|
|
opnum_t opno;
|
|
|
|
@ -1182,7 +1182,7 @@ doproc(void)
|
|
|
|
|
dividend = (operations + execute_freq) / (execute_freq + 1);
|
|
|
|
|
sprintf(buf, "p%x", procid);
|
|
|
|
|
(void)mkdir(buf, 0777);
|
|
|
|
|
if (chdir(buf) < 0 || stat64(".", &statbuf) < 0) {
|
|
|
|
|
if (chdir(buf) < 0 || stat(".", &statbuf) < 0) {
|
|
|
|
|
perror(buf);
|
|
|
|
|
_exit(1);
|
|
|
|
|
}
|
|
|
|
@ -1214,7 +1214,7 @@ doproc(void)
|
|
|
|
|
* the forced shutdown happened.
|
|
|
|
|
*/
|
|
|
|
|
if (errtag != 0 && opno % 100 == 0) {
|
|
|
|
|
rval = stat64(".", &statbuf);
|
|
|
|
|
rval = stat(".", &statbuf);
|
|
|
|
|
if (rval == EIO) {
|
|
|
|
|
fprintf(stderr, "Detected EIO\n");
|
|
|
|
|
goto errout;
|
|
|
|
@ -1537,18 +1537,18 @@ link_path(pathname_t *name1, pathname_t *name2)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
lstat64_path(pathname_t *name, struct stat64 *sbuf)
|
|
|
|
|
lstat_path(pathname_t *name, struct stat *sbuf)
|
|
|
|
|
{
|
|
|
|
|
char buf[NAME_MAX + 1];
|
|
|
|
|
pathname_t newname;
|
|
|
|
|
int rval;
|
|
|
|
|
|
|
|
|
|
rval = lstat64(name->path, sbuf);
|
|
|
|
|
rval = lstat(name->path, sbuf);
|
|
|
|
|
if (rval >= 0 || errno != ENAMETOOLONG)
|
|
|
|
|
return rval;
|
|
|
|
|
separate_pathname(name, buf, &newname);
|
|
|
|
|
if (chdir(buf) == 0) {
|
|
|
|
|
rval = lstat64_path(&newname, sbuf);
|
|
|
|
|
rval = lstat_path(&newname, sbuf);
|
|
|
|
|
assert(chdir("..") == 0);
|
|
|
|
|
}
|
|
|
|
|
free_pathname(&newname);
|
|
|
|
@ -1870,18 +1870,18 @@ show_ops(int flag, char *lead_str)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
stat64_path(pathname_t *name, struct stat64 *sbuf)
|
|
|
|
|
stat_path(pathname_t *name, struct stat *sbuf)
|
|
|
|
|
{
|
|
|
|
|
char buf[NAME_MAX + 1];
|
|
|
|
|
pathname_t newname;
|
|
|
|
|
int rval;
|
|
|
|
|
|
|
|
|
|
rval = stat64(name->path, sbuf);
|
|
|
|
|
rval = stat(name->path, sbuf);
|
|
|
|
|
if (rval >= 0 || errno != ENAMETOOLONG)
|
|
|
|
|
return rval;
|
|
|
|
|
separate_pathname(name, buf, &newname);
|
|
|
|
|
if (chdir(buf) == 0) {
|
|
|
|
|
rval = stat64_path(&newname, sbuf);
|
|
|
|
|
rval = stat_path(&newname, sbuf);
|
|
|
|
|
assert(chdir("..") == 0);
|
|
|
|
|
}
|
|
|
|
|
free_pathname(&newname);
|
|
|
|
@ -1913,7 +1913,7 @@ symlink_path(const char *name1, pathname_t *name)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
truncate64_path(pathname_t *name, off64_t length)
|
|
|
|
|
truncate64_path(pathname_t *name, off_t length)
|
|
|
|
|
{
|
|
|
|
|
char buf[NAME_MAX + 1];
|
|
|
|
|
pathname_t newname;
|
|
|
|
@ -2026,7 +2026,7 @@ non_btrfs_freq(const char *path)
|
|
|
|
|
ops[btrfs_ops[i]].freq = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void inode_info(char *str, size_t sz, struct stat64 *s, int verbose)
|
|
|
|
|
void inode_info(char *str, size_t sz, struct stat *s, int verbose)
|
|
|
|
|
{
|
|
|
|
|
if (verbose)
|
|
|
|
|
snprintf(str, sz, "[%ld %ld %d %d %lld %lld]",
|
|
|
|
@ -2100,8 +2100,8 @@ allocsp_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
struct xfs_flock64 fl;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
|
|
|
|
@ -2122,9 +2122,9 @@ allocsp_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: allocsp - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: allocsp - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -2132,7 +2132,7 @@ allocsp_f(opnum_t opno, long r)
|
|
|
|
|
}
|
|
|
|
|
inode_info(st, sizeof(st), &stb, v);
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
fl.l_whence = SEEK_SET;
|
|
|
|
|
fl.l_start = off;
|
|
|
|
@ -2159,8 +2159,8 @@ do_aio_rw(opnum_t opno, long r, int flags)
|
|
|
|
|
int fd = -1;
|
|
|
|
|
size_t len;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
char *dio_env;
|
|
|
|
@ -2184,9 +2184,9 @@ do_aio_rw(opnum_t opno, long r, int flags)
|
|
|
|
|
procid, opno, f.path, e);
|
|
|
|
|
goto aio_out;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: do_aio_rw - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: do_aio_rw - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
goto aio_out;
|
|
|
|
|
}
|
|
|
|
@ -2230,13 +2230,13 @@ do_aio_rw(opnum_t opno, long r, int flags)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (iswrite) {
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off -= (off % align);
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
memset(buf, nameseq & 0xff, len);
|
|
|
|
|
io_prep_pwrite(&iocb, fd, buf, len, off);
|
|
|
|
|
} else {
|
|
|
|
|
off = (off64_t)(lr % stb.st_size);
|
|
|
|
|
off = (off_t)(lr % stb.st_size);
|
|
|
|
|
off -= (off % align);
|
|
|
|
|
io_prep_pread(&iocb, fd, buf, len, off);
|
|
|
|
|
}
|
|
|
|
@ -2277,8 +2277,8 @@ do_uring_rw(opnum_t opno, long r, int flags)
|
|
|
|
|
int fd = -1;
|
|
|
|
|
size_t len;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
struct io_uring_sqe *sqe;
|
|
|
|
@ -2304,9 +2304,9 @@ do_uring_rw(opnum_t opno, long r, int flags)
|
|
|
|
|
procid, opno, f.path, e);
|
|
|
|
|
goto uring_out;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: do_uring_rw - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: do_uring_rw - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
goto uring_out;
|
|
|
|
|
}
|
|
|
|
@ -2336,12 +2336,12 @@ do_uring_rw(opnum_t opno, long r, int flags)
|
|
|
|
|
iovec.iov_base = buf;
|
|
|
|
|
iovec.iov_len = len;
|
|
|
|
|
if (iswrite) {
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
memset(buf, nameseq & 0xff, len);
|
|
|
|
|
io_uring_prep_writev(sqe, fd, &iovec, 1, off);
|
|
|
|
|
} else {
|
|
|
|
|
off = (off64_t)(lr % stb.st_size);
|
|
|
|
|
off = (off_t)(lr % stb.st_size);
|
|
|
|
|
io_uring_prep_readv(sqe, fd, &iovec, 1, off);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -2522,7 +2522,7 @@ bulkstat1_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
int good;
|
|
|
|
|
__u64 ino;
|
|
|
|
|
struct stat64 s;
|
|
|
|
|
struct stat s;
|
|
|
|
|
struct xfs_bstat t;
|
|
|
|
|
int v;
|
|
|
|
|
struct xfs_fsop_bulkreq bsr;
|
|
|
|
@ -2534,7 +2534,7 @@ bulkstat1_f(opnum_t opno, long r)
|
|
|
|
|
init_pathname(&f);
|
|
|
|
|
if (!get_fname(FT_ANYm, r, &f, NULL, NULL, &v))
|
|
|
|
|
append_pathname(&f, ".");
|
|
|
|
|
ino = stat64_path(&f, &s) < 0 ? (ino64_t)r : s.st_ino;
|
|
|
|
|
ino = stat_path(&f, &s) < 0 ? (ino64_t)r : s.st_ino;
|
|
|
|
|
check_cwd();
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
} else {
|
|
|
|
@ -2605,14 +2605,14 @@ clonerange_f(
|
|
|
|
|
struct file_clone_range fcr;
|
|
|
|
|
struct pathname fpath1;
|
|
|
|
|
struct pathname fpath2;
|
|
|
|
|
struct stat64 stat1;
|
|
|
|
|
struct stat64 stat2;
|
|
|
|
|
struct stat stat1;
|
|
|
|
|
struct stat stat2;
|
|
|
|
|
char inoinfo1[1024];
|
|
|
|
|
char inoinfo2[1024];
|
|
|
|
|
off64_t lr;
|
|
|
|
|
off64_t off1;
|
|
|
|
|
off64_t off2;
|
|
|
|
|
off64_t max_off2;
|
|
|
|
|
off_t lr;
|
|
|
|
|
off_t off1;
|
|
|
|
|
off_t off2;
|
|
|
|
|
off_t max_off2;
|
|
|
|
|
size_t len;
|
|
|
|
|
int v1;
|
|
|
|
|
int v2;
|
|
|
|
@ -2660,17 +2660,17 @@ clonerange_f(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Get file stats */
|
|
|
|
|
if (fstat64(fd1, &stat1) < 0) {
|
|
|
|
|
if (fstat(fd1, &stat1) < 0) {
|
|
|
|
|
if (v1)
|
|
|
|
|
printf("%d/%lld: clonerange read - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: clonerange read - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, fpath1.path, errno);
|
|
|
|
|
goto out_fd2;
|
|
|
|
|
}
|
|
|
|
|
inode_info(inoinfo1, sizeof(inoinfo1), &stat1, v1);
|
|
|
|
|
|
|
|
|
|
if (fstat64(fd2, &stat2) < 0) {
|
|
|
|
|
if (fstat(fd2, &stat2) < 0) {
|
|
|
|
|
if (v2)
|
|
|
|
|
printf("%d/%lld: clonerange write - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: clonerange write - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, fpath2.path, errno);
|
|
|
|
|
goto out_fd2;
|
|
|
|
|
}
|
|
|
|
@ -2688,7 +2688,7 @@ clonerange_f(
|
|
|
|
|
if (stat1.st_size == len)
|
|
|
|
|
off1 = 0;
|
|
|
|
|
else
|
|
|
|
|
off1 = (off64_t)(lr % MIN(stat1.st_size - len, MAXFSIZE));
|
|
|
|
|
off1 = (off_t)(lr % MIN(stat1.st_size - len, MAXFSIZE));
|
|
|
|
|
off1 %= maxfsize;
|
|
|
|
|
off1 = rounddown_64(off1, stat1.st_blksize);
|
|
|
|
|
|
|
|
|
@ -2699,7 +2699,7 @@ clonerange_f(
|
|
|
|
|
max_off2 = MIN(stat2.st_size + (1024ULL * stat2.st_blksize), MAXFSIZE);
|
|
|
|
|
do {
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off2 = (off64_t)(lr % max_off2);
|
|
|
|
|
off2 = (off_t)(lr % max_off2);
|
|
|
|
|
off2 %= maxfsize;
|
|
|
|
|
off2 = rounddown_64(off2, stat2.st_blksize);
|
|
|
|
|
} while (stat1.st_ino == stat2.st_ino && llabs(off2 - off1) < len);
|
|
|
|
@ -2743,8 +2743,8 @@ copyrange_f(
|
|
|
|
|
#ifdef HAVE_COPY_FILE_RANGE
|
|
|
|
|
struct pathname fpath1;
|
|
|
|
|
struct pathname fpath2;
|
|
|
|
|
struct stat64 stat1;
|
|
|
|
|
struct stat64 stat2;
|
|
|
|
|
struct stat stat1;
|
|
|
|
|
struct stat stat2;
|
|
|
|
|
char inoinfo1[1024];
|
|
|
|
|
char inoinfo2[1024];
|
|
|
|
|
loff_t lr;
|
|
|
|
@ -2802,17 +2802,17 @@ copyrange_f(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Get file stats */
|
|
|
|
|
if (fstat64(fd1, &stat1) < 0) {
|
|
|
|
|
if (fstat(fd1, &stat1) < 0) {
|
|
|
|
|
if (v1)
|
|
|
|
|
printf("%d/%lld: copyrange read - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: copyrange read - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, fpath1.path, errno);
|
|
|
|
|
goto out_fd2;
|
|
|
|
|
}
|
|
|
|
|
inode_info(inoinfo1, sizeof(inoinfo1), &stat1, v1);
|
|
|
|
|
|
|
|
|
|
if (fstat64(fd2, &stat2) < 0) {
|
|
|
|
|
if (fstat(fd2, &stat2) < 0) {
|
|
|
|
|
if (v2)
|
|
|
|
|
printf("%d/%lld: copyrange write - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: copyrange write - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, fpath2.path, errno);
|
|
|
|
|
goto out_fd2;
|
|
|
|
|
}
|
|
|
|
@ -2829,7 +2829,7 @@ copyrange_f(
|
|
|
|
|
if (stat1.st_size == len)
|
|
|
|
|
off1 = 0;
|
|
|
|
|
else
|
|
|
|
|
off1 = (off64_t)(lr % MIN(stat1.st_size - len, MAXFSIZE));
|
|
|
|
|
off1 = (off_t)(lr % MIN(stat1.st_size - len, MAXFSIZE));
|
|
|
|
|
off1 %= maxfsize;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -2839,7 +2839,7 @@ copyrange_f(
|
|
|
|
|
max_off2 = MIN(stat2.st_size + (1024ULL * stat2.st_blksize), MAXFSIZE);
|
|
|
|
|
do {
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off2 = (off64_t)(lr % max_off2);
|
|
|
|
|
off2 = (off_t)(lr % max_off2);
|
|
|
|
|
off2 %= maxfsize;
|
|
|
|
|
} while (stat1.st_ino == stat2.st_ino && llabs(off2 - off1) < len);
|
|
|
|
|
|
|
|
|
@ -2900,13 +2900,13 @@ deduperange_f(
|
|
|
|
|
#define INFO_SZ 1024
|
|
|
|
|
struct file_dedupe_range *fdr;
|
|
|
|
|
struct pathname *fpath;
|
|
|
|
|
struct stat64 *stat;
|
|
|
|
|
struct stat *stat;
|
|
|
|
|
char *info;
|
|
|
|
|
off64_t *off;
|
|
|
|
|
off_t *off;
|
|
|
|
|
int *v;
|
|
|
|
|
int *fd;
|
|
|
|
|
int nr;
|
|
|
|
|
off64_t lr;
|
|
|
|
|
off_t lr;
|
|
|
|
|
size_t len;
|
|
|
|
|
int ret;
|
|
|
|
|
int i;
|
|
|
|
@ -2938,7 +2938,7 @@ deduperange_f(
|
|
|
|
|
goto out_fdr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stat = calloc(nr, sizeof(struct stat64));
|
|
|
|
|
stat = calloc(nr, sizeof(struct stat));
|
|
|
|
|
if (!stat) {
|
|
|
|
|
printf("%d/%lld: line %d error %d\n",
|
|
|
|
|
procid, opno, __LINE__, errno);
|
|
|
|
@ -2952,7 +2952,7 @@ deduperange_f(
|
|
|
|
|
goto out_stats;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
off = calloc(nr, sizeof(off64_t));
|
|
|
|
|
off = calloc(nr, sizeof(off_t));
|
|
|
|
|
if (!off) {
|
|
|
|
|
printf("%d/%lld: line %d error %d\n",
|
|
|
|
|
procid, opno, __LINE__, errno);
|
|
|
|
@ -3017,9 +3017,9 @@ deduperange_f(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Get file stats */
|
|
|
|
|
if (fstat64(fd[0], &stat[0]) < 0) {
|
|
|
|
|
if (fstat(fd[0], &stat[0]) < 0) {
|
|
|
|
|
if (v[0])
|
|
|
|
|
printf("%d/%lld: deduperange read - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: deduperange read - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, fpath[0].path, errno);
|
|
|
|
|
goto out_fds;
|
|
|
|
|
}
|
|
|
|
@ -3027,9 +3027,9 @@ deduperange_f(
|
|
|
|
|
inode_info(&info[0], INFO_SZ, &stat[0], v[0]);
|
|
|
|
|
|
|
|
|
|
for (i = 1; i < nr; i++) {
|
|
|
|
|
if (fstat64(fd[i], &stat[i]) < 0) {
|
|
|
|
|
if (fstat(fd[i], &stat[i]) < 0) {
|
|
|
|
|
if (v[i])
|
|
|
|
|
printf("%d/%lld: deduperange write - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: deduperange write - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, fpath[i].path, errno);
|
|
|
|
|
goto out_fds;
|
|
|
|
|
}
|
|
|
|
@ -3049,7 +3049,7 @@ deduperange_f(
|
|
|
|
|
if (stat[0].st_size == len)
|
|
|
|
|
off[0] = 0;
|
|
|
|
|
else
|
|
|
|
|
off[0] = (off64_t)(lr % MIN(stat[0].st_size - len, MAXFSIZE));
|
|
|
|
|
off[0] = (off_t)(lr % MIN(stat[0].st_size - len, MAXFSIZE));
|
|
|
|
|
off[0] %= maxfsize;
|
|
|
|
|
off[0] = rounddown_64(off[0], stat[0].st_blksize);
|
|
|
|
|
|
|
|
|
@ -3065,7 +3065,7 @@ deduperange_f(
|
|
|
|
|
if (stat[i].st_size <= len)
|
|
|
|
|
off[i] = 0;
|
|
|
|
|
else
|
|
|
|
|
off[i] = (off64_t)(lr % MIN(stat[i].st_size - len, MAXFSIZE));
|
|
|
|
|
off[i] = (off_t)(lr % MIN(stat[i].st_size - len, MAXFSIZE));
|
|
|
|
|
off[i] %= maxfsize;
|
|
|
|
|
off[i] = rounddown_64(off[i], stat[i].st_blksize);
|
|
|
|
|
} while (stat[0].st_ino == stat[i].st_ino &&
|
|
|
|
@ -3179,8 +3179,8 @@ splice_f(opnum_t opno, long r)
|
|
|
|
|
{
|
|
|
|
|
struct pathname fpath1;
|
|
|
|
|
struct pathname fpath2;
|
|
|
|
|
struct stat64 stat1;
|
|
|
|
|
struct stat64 stat2;
|
|
|
|
|
struct stat stat1;
|
|
|
|
|
struct stat stat2;
|
|
|
|
|
char inoinfo1[1024];
|
|
|
|
|
char inoinfo2[1024];
|
|
|
|
|
loff_t lr;
|
|
|
|
@ -3237,17 +3237,17 @@ splice_f(opnum_t opno, long r)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Get file stats */
|
|
|
|
|
if (fstat64(fd1, &stat1) < 0) {
|
|
|
|
|
if (fstat(fd1, &stat1) < 0) {
|
|
|
|
|
if (v1)
|
|
|
|
|
printf("%d/%lld: splice read - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: splice read - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, fpath1.path, errno);
|
|
|
|
|
goto out_fd2;
|
|
|
|
|
}
|
|
|
|
|
inode_info(inoinfo1, sizeof(inoinfo1), &stat1, v1);
|
|
|
|
|
|
|
|
|
|
if (fstat64(fd2, &stat2) < 0) {
|
|
|
|
|
if (fstat(fd2, &stat2) < 0) {
|
|
|
|
|
if (v2)
|
|
|
|
|
printf("%d/%lld: splice write - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: splice write - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, fpath2.path, errno);
|
|
|
|
|
goto out_fd2;
|
|
|
|
|
}
|
|
|
|
@ -3264,7 +3264,7 @@ splice_f(opnum_t opno, long r)
|
|
|
|
|
if (stat1.st_size == len)
|
|
|
|
|
off1 = 0;
|
|
|
|
|
else
|
|
|
|
|
off1 = (off64_t)(lr % MIN(stat1.st_size - len, MAXFSIZE));
|
|
|
|
|
off1 = (off_t)(lr % MIN(stat1.st_size - len, MAXFSIZE));
|
|
|
|
|
off1 %= maxfsize;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -3273,7 +3273,7 @@ splice_f(opnum_t opno, long r)
|
|
|
|
|
* past the current dest file EOF
|
|
|
|
|
*/
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off2 = (off64_t)(lr % MIN(stat2.st_size + (1024ULL * stat2.st_blksize), MAXFSIZE));
|
|
|
|
|
off2 = (off_t)(lr % MIN(stat2.st_size + (1024ULL * stat2.st_blksize), MAXFSIZE));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Since len, off1 and off2 will be changed later, preserve their
|
|
|
|
@ -3431,8 +3431,8 @@ dread_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
size_t len;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
char *dio_env;
|
|
|
|
@ -3454,9 +3454,9 @@ dread_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: dread - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: dread - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -3491,7 +3491,7 @@ dread_f(opnum_t opno, long r)
|
|
|
|
|
|
|
|
|
|
align = (int64_t)diob.d_miniosz;
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % stb.st_size);
|
|
|
|
|
off = (off_t)(lr % stb.st_size);
|
|
|
|
|
off -= (off % align);
|
|
|
|
|
lseek64(fd, off, SEEK_SET);
|
|
|
|
|
len = (random() % FILELEN_MAX) + 1;
|
|
|
|
@ -3521,8 +3521,8 @@ dwrite_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
size_t len;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
char *dio_env;
|
|
|
|
@ -3544,9 +3544,9 @@ dwrite_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: dwrite - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: dwrite - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -3572,7 +3572,7 @@ dwrite_f(opnum_t opno, long r)
|
|
|
|
|
|
|
|
|
|
align = (int64_t)diob.d_miniosz;
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off -= (off % align);
|
|
|
|
|
lseek64(fd, off, SEEK_SET);
|
|
|
|
|
len = (random() % FILELEN_MAX) + 1;
|
|
|
|
@ -3618,9 +3618,9 @@ do_fallocate(opnum_t opno, long r, int mode)
|
|
|
|
|
pathname_t f;
|
|
|
|
|
int fd;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
off64_t len;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
off_t len;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
|
|
|
|
@ -3640,9 +3640,9 @@ do_fallocate(opnum_t opno, long r, int mode)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
check_cwd();
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: do_fallocate - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: do_fallocate - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -3650,9 +3650,9 @@ do_fallocate(opnum_t opno, long r, int mode)
|
|
|
|
|
}
|
|
|
|
|
inode_info(st, sizeof(st), &stb, v);
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
len = (off64_t)(random() % (1024 * 1024));
|
|
|
|
|
len = (off_t)(random() % (1024 * 1024));
|
|
|
|
|
/*
|
|
|
|
|
* Collapse/insert range requires off and len to be block aligned,
|
|
|
|
|
* make it more likely to be the case.
|
|
|
|
@ -3733,8 +3733,8 @@ fiemap_f(opnum_t opno, long r)
|
|
|
|
|
pathname_t f;
|
|
|
|
|
int fd;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
int blocks_to_map;
|
|
|
|
@ -3757,9 +3757,9 @@ fiemap_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: fiemap - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: fiemap - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -3777,7 +3777,7 @@ fiemap_f(opnum_t opno, long r)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
fiemap->fm_flags = random() & (FIEMAP_FLAGS_COMPAT | 0x10000);
|
|
|
|
|
fiemap->fm_extent_count = blocks_to_map;
|
|
|
|
@ -3806,8 +3806,8 @@ freesp_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
struct xfs_flock64 fl;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
|
|
|
|
@ -3828,9 +3828,9 @@ freesp_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: freesp - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: freesp - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -3838,7 +3838,7 @@ freesp_f(opnum_t opno, long r)
|
|
|
|
|
}
|
|
|
|
|
inode_info(st, sizeof(st), &stb, v);
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
fl.l_whence = SEEK_SET;
|
|
|
|
|
fl.l_start = off;
|
|
|
|
@ -4224,9 +4224,9 @@ do_mmap(opnum_t opno, long r, int prot)
|
|
|
|
|
int fd;
|
|
|
|
|
size_t len;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
off_t off;
|
|
|
|
|
int flags;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
sigjmp_buf sigbus_jmpbuf;
|
|
|
|
@ -4248,9 +4248,9 @@ do_mmap(opnum_t opno, long r, int prot)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: do_mmap - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: do_mmap - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -4267,7 +4267,7 @@ do_mmap(opnum_t opno, long r, int prot)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % stb.st_size);
|
|
|
|
|
off = (off_t)(lr % stb.st_size);
|
|
|
|
|
off = rounddown_64(off, sysconf(_SC_PAGE_SIZE));
|
|
|
|
|
len = (size_t)(random() % MIN(stb.st_size - off, FILELEN_MAX)) + 1;
|
|
|
|
|
|
|
|
|
@ -4369,8 +4369,8 @@ read_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
size_t len;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
|
|
|
|
@ -4391,9 +4391,9 @@ read_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: read - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: read - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -4409,7 +4409,7 @@ read_f(opnum_t opno, long r)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % stb.st_size);
|
|
|
|
|
off = (off_t)(lr % stb.st_size);
|
|
|
|
|
lseek64(fd, off, SEEK_SET);
|
|
|
|
|
len = (random() % FILELEN_MAX) + 1;
|
|
|
|
|
buf = malloc(len);
|
|
|
|
@ -4453,8 +4453,8 @@ readv_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
size_t len;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
struct iovec *iov = NULL;
|
|
|
|
@ -4480,9 +4480,9 @@ readv_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: readv - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: readv - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -4498,7 +4498,7 @@ readv_f(opnum_t opno, long r)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % stb.st_size);
|
|
|
|
|
off = (off_t)(lr % stb.st_size);
|
|
|
|
|
lseek64(fd, off, SEEK_SET);
|
|
|
|
|
len = (random() % FILELEN_MAX) + 1;
|
|
|
|
|
buf = malloc(len);
|
|
|
|
@ -4738,8 +4738,8 @@ resvsp_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
struct xfs_flock64 fl;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
|
|
|
|
@ -4760,9 +4760,9 @@ resvsp_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: resvsp - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: resvsp - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -4770,11 +4770,11 @@ resvsp_f(opnum_t opno, long r)
|
|
|
|
|
}
|
|
|
|
|
inode_info(st, sizeof(st), &stb, v);
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
fl.l_whence = SEEK_SET;
|
|
|
|
|
fl.l_start = off;
|
|
|
|
|
fl.l_len = (off64_t)(random() % (1024 * 1024));
|
|
|
|
|
fl.l_len = (off_t)(random() % (1024 * 1024));
|
|
|
|
|
e = xfsctl(f.path, fd, XFS_IOC_RESVSP64, &fl) < 0 ? errno : 0;
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: xfsctl(XFS_IOC_RESVSP64) %s%s %lld %lld %d\n",
|
|
|
|
@ -4971,7 +4971,7 @@ stat_f(opnum_t opno, long r)
|
|
|
|
|
{
|
|
|
|
|
int e;
|
|
|
|
|
pathname_t f;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
|
|
|
|
|
init_pathname(&f);
|
|
|
|
@ -4981,7 +4981,7 @@ stat_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
e = lstat64_path(&f, &stb) < 0 ? errno : 0;
|
|
|
|
|
e = lstat_path(&f, &stb) < 0 ? errno : 0;
|
|
|
|
|
check_cwd();
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: stat %s %d\n", procid, opno, f.path, e);
|
|
|
|
@ -5132,8 +5132,8 @@ truncate_f(opnum_t opno, long r)
|
|
|
|
|
int e;
|
|
|
|
|
pathname_t f;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
|
|
|
|
@ -5144,18 +5144,18 @@ truncate_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
e = stat64_path(&f, &stb) < 0 ? errno : 0;
|
|
|
|
|
e = stat_path(&f, &stb) < 0 ? errno : 0;
|
|
|
|
|
check_cwd();
|
|
|
|
|
if (e > 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: truncate - stat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: truncate - stat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, e);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
inode_info(st, sizeof(st), &stb, v);
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
e = truncate64_path(&f, off) < 0 ? errno : 0;
|
|
|
|
|
check_cwd();
|
|
|
|
@ -5208,8 +5208,8 @@ unresvsp_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
struct xfs_flock64 fl;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
|
|
|
|
@ -5230,9 +5230,9 @@ unresvsp_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: unresvsp - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: unresvsp - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -5240,11 +5240,11 @@ unresvsp_f(opnum_t opno, long r)
|
|
|
|
|
}
|
|
|
|
|
inode_info(st, sizeof(st), &stb, v);
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
fl.l_whence = SEEK_SET;
|
|
|
|
|
fl.l_start = off;
|
|
|
|
|
fl.l_len = (off64_t)(random() % (1 << 20));
|
|
|
|
|
fl.l_len = (off_t)(random() % (1 << 20));
|
|
|
|
|
e = xfsctl(f.path, fd, XFS_IOC_UNRESVSP64, &fl) < 0 ? errno : 0;
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: xfsctl(XFS_IOC_UNRESVSP64) %s%s %lld %lld %d\n",
|
|
|
|
@ -5280,8 +5280,8 @@ write_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
size_t len;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
|
|
|
|
@ -5302,9 +5302,9 @@ write_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: write - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: write - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -5312,7 +5312,7 @@ write_f(opnum_t opno, long r)
|
|
|
|
|
}
|
|
|
|
|
inode_info(st, sizeof(st), &stb, v);
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
lseek64(fd, off, SEEK_SET);
|
|
|
|
|
len = (random() % FILELEN_MAX) + 1;
|
|
|
|
@ -5336,8 +5336,8 @@ writev_f(opnum_t opno, long r)
|
|
|
|
|
int fd;
|
|
|
|
|
size_t len;
|
|
|
|
|
int64_t lr;
|
|
|
|
|
off64_t off;
|
|
|
|
|
struct stat64 stb;
|
|
|
|
|
off_t off;
|
|
|
|
|
struct stat stb;
|
|
|
|
|
int v;
|
|
|
|
|
char st[1024];
|
|
|
|
|
struct iovec *iov = NULL;
|
|
|
|
@ -5363,9 +5363,9 @@ writev_f(opnum_t opno, long r)
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (fstat64(fd, &stb) < 0) {
|
|
|
|
|
if (fstat(fd, &stb) < 0) {
|
|
|
|
|
if (v)
|
|
|
|
|
printf("%d/%lld: writev - fstat64 %s failed %d\n",
|
|
|
|
|
printf("%d/%lld: writev - fstat %s failed %d\n",
|
|
|
|
|
procid, opno, f.path, errno);
|
|
|
|
|
free_pathname(&f);
|
|
|
|
|
close(fd);
|
|
|
|
@ -5373,7 +5373,7 @@ writev_f(opnum_t opno, long r)
|
|
|
|
|
}
|
|
|
|
|
inode_info(st, sizeof(st), &stb, v);
|
|
|
|
|
lr = ((int64_t)random() << 32) + random();
|
|
|
|
|
off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off = (off_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
|
|
|
|
|
off %= maxfsize;
|
|
|
|
|
lseek64(fd, off, SEEK_SET);
|
|
|
|
|
len = (random() % FILELEN_MAX) + 1;
|
|
|
|
|