On Sat, Oct 29, 2011 at 12:48:10AM -0000, Dmitry Monakhov wrote:
> Fsstress exec behaviour is not completely determinated in case of
> low resources mode due to ENOMEM, ENOSPC, etc. In some places we
> call stat(2). This information may be halpfull for future
> investigations purposes. Let's dump stat info where possible.
>
> Reviewed-by: Christoph Hellwig <hch@xxxxxx>
> Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx>
>
> ---
> ltp/fsstress.c | 83 +++++++++++++++++++++++++++++++++++++-------------------
> 1 files changed, 55 insertions(+), 28 deletions(-)
>
> diff --git a/ltp/fsstress.c b/ltp/fsstress.c
> index c37cddf..51ecda2 100644
> --- a/ltp/fsstress.c
> +++ b/ltp/fsstress.c
> @@ -1391,6 +1391,14 @@ zero_freq(void)
> p->freq = 0;
> }
>
> +void inode_info(char *str, size_t sz, struct stat64 *s, int verbose)
> +{
> + if (verbose)
> + snprintf(str, sz, "[%ld %ld %d %d %lld %lld]", (long)s->st_ino,
> + (long)s->st_nlink, s->st_uid, s->st_gid,
> + (long long) s->st_blocks, (long long) s->st_size);
> +}
> +
> void
> allocsp_f(int opno, long r)
> {
> @@ -1402,6 +1410,7 @@ allocsp_f(int opno, long r)
> off64_t off;
> struct stat64 stb;
> int v;
> + char st[1024];
>
> init_pathname(&f);
> if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) {
> @@ -1428,6 +1437,7 @@ allocsp_f(int opno, long r)
> close(fd);
> 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 %= maxfsize;
> @@ -1435,9 +1445,10 @@ allocsp_f(int opno, long r)
> fl.l_start = off;
> fl.l_len = 0;
> e = xfsctl(f.path, fd, XFS_IOC_ALLOCSP64, &fl) < 0 ? errno : 0;
> - if (v)
> - printf("%d/%d: xfsctl(XFS_IOC_ALLOCSP64) %s %lld 0 %d\n",
> - procid, opno, f.path, (long long)off, e);
> + if (v) {
> + printf("%d/%d: xfsctl(XFS_IOC_ALLOCSP64) %s%s %lld 0 %d\n",
> + procid, opno, f.path, st, (long long)off, e);
> + }
> free_pathname(&f);
> close(fd);
> }
> @@ -1779,6 +1790,7 @@ dread_f(int opno, long r)
> off64_t off;
> struct stat64 stb;
> int v;
> + char st[1024];
>
> init_pathname(&f);
> if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) {
> @@ -1800,15 +1812,16 @@ dread_f(int opno, long r)
> if (fstat64(fd, &stb) < 0) {
> if (v)
> printf("%d/%d: dread - fstat64 %s failed %d\n",
> - procid, opno, f.path, errno);
> + procid, opno, f.path, errno);
> free_pathname(&f);
> close(fd);
> return;
> }
> + inode_info(st, sizeof(st), &stb, v);
> if (stb.st_size == 0) {
> if (v)
> - printf("%d/%d: dread - %s zero size\n", procid, opno,
> - f.path);
> + printf("%d/%d: dread - %s%s zero size\n", procid, opno,
> + f.path, st);
> free_pathname(&f);
> close(fd);
> return;
> @@ -1816,8 +1829,8 @@ dread_f(int opno, long r)
> if (xfsctl(f.path, fd, XFS_IOC_DIOINFO, &diob) < 0) {
> if (v)
> printf(
> - "%d/%d: dread - xfsctl(XFS_IOC_DIOINFO) %s failed %d\n",
> - procid, opno, f.path, errno);
> + "%d/%d: dread - xfsctl(XFS_IOC_DIOINFO) %s%s failed
> %d\n",
> + procid, opno, f.path, st, errno);
> free_pathname(&f);
> close(fd);
> return;
> @@ -1837,8 +1850,8 @@ dread_f(int opno, long r)
> e = read(fd, buf, len) < 0 ? errno : 0;
> free(buf);
> if (v)
> - printf("%d/%d: dread %s [%lld,%d] %d\n",
> - procid, opno, f.path, (long long)off, (int)len, e);
> + printf("%d/%d: dread %s%s [%lld,%d] %d\n",
> + procid, opno, f.path, st, (long long)off, (int)len, e);
> free_pathname(&f);
> close(fd);
> }
> @@ -1857,6 +1870,7 @@ dwrite_f(int opno, long r)
> off64_t off;
> struct stat64 stb;
> int v;
> + char st[1024];
>
> init_pathname(&f);
> if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) {
> @@ -1883,11 +1897,12 @@ dwrite_f(int opno, long r)
> close(fd);
> return;
> }
> + inode_info(st, sizeof(st), &stb, v);
> if (xfsctl(f.path, fd, XFS_IOC_DIOINFO, &diob) < 0) {
> if (v)
> printf("%d/%d: dwrite - xfsctl(XFS_IOC_DIOINFO)"
> - " %s failed %d\n",
> - procid, opno, f.path, errno);
> + " %s%s failed %d\n",
> + procid, opno, f.path, st, errno);
> free_pathname(&f);
> close(fd);
> return;
> @@ -1910,8 +1925,8 @@ dwrite_f(int opno, long r)
> e = write(fd, buf, len) < 0 ? errno : 0;
> free(buf);
> if (v)
> - printf("%d/%d: dwrite %s [%lld,%d] %d\n",
> - procid, opno, f.path, (long long)off, (int)len, e);
> + printf("%d/%d: dwrite %s%s [%lld,%d] %d\n",
> + procid, opno, f.path, st, (long long)off, (int)len, e);
> free_pathname(&f);
> close(fd);
> }
> @@ -1960,6 +1975,7 @@ freesp_f(int opno, long r)
> off64_t off;
> struct stat64 stb;
> int v;
> + char st[1024];
>
> init_pathname(&f);
> if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) {
> @@ -1986,6 +2002,7 @@ freesp_f(int opno, long r)
> close(fd);
> 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 %= maxfsize;
> @@ -1994,8 +2011,8 @@ freesp_f(int opno, long r)
> fl.l_len = 0;
> e = xfsctl(f.path, fd, XFS_IOC_FREESP64, &fl) < 0 ? errno : 0;
> if (v)
> - printf("%d/%d: xfsctl(XFS_IOC_FREESP64) %s %lld 0 %d\n",
> - procid, opno, f.path, (long long)off, e);
> + printf("%d/%d: xfsctl(XFS_IOC_FREESP64) %s%s %lld 0 %d\n",
> + procid, opno, f.path, st, (long long)off, e);
> free_pathname(&f);
> close(fd);
> }
> @@ -2198,6 +2215,7 @@ read_f(int opno, long r)
> off64_t off;
> struct stat64 stb;
> int v;
> + char st[1024];
>
> init_pathname(&f);
> if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) {
> @@ -2224,10 +2242,11 @@ read_f(int opno, long r)
> close(fd);
> return;
> }
> + inode_info(st, sizeof(st), &stb, v);
> if (stb.st_size == 0) {
> if (v)
> - printf("%d/%d: read - %s zero size\n", procid, opno,
> - f.path);
> + printf("%d/%d: read - %s%s zero size\n", procid, opno,
> + f.path, st);
> free_pathname(&f);
> close(fd);
> return;
> @@ -2240,8 +2259,8 @@ read_f(int opno, long r)
> e = read(fd, buf, len) < 0 ? errno : 0;
> free(buf);
> if (v)
> - printf("%d/%d: read %s [%lld,%d] %d\n",
> - procid, opno, f.path, (long long)off, (int)len, e);
> + printf("%d/%d: read %s%s [%lld,%d] %d\n",
> + procid, opno, f.path, st, (long long)off, (int)len, e);
> free_pathname(&f);
> close(fd);
> }
> @@ -2348,6 +2367,7 @@ resvsp_f(int opno, long r)
> off64_t off;
> struct stat64 stb;
> int v;
> + char st[1024];
>
> init_pathname(&f);
> if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) {
> @@ -2374,6 +2394,7 @@ resvsp_f(int opno, long r)
> close(fd);
> 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 %= maxfsize;
> @@ -2382,8 +2403,8 @@ resvsp_f(int opno, long r)
> fl.l_len = (off64_t)(random() % (1024 * 1024));
> e = xfsctl(f.path, fd, XFS_IOC_RESVSP64, &fl) < 0 ? errno : 0;
> if (v)
> - printf("%d/%d: xfsctl(XFS_IOC_RESVSP64) %s %lld %lld %d\n",
> - procid, opno, f.path,
> + printf("%d/%d: xfsctl(XFS_IOC_RESVSP64) %s%s %lld %lld %d\n",
> + procid, opno, f.path, st,
> (long long)off, (long long)fl.l_len, e);
> free_pathname(&f);
> close(fd);
> @@ -2506,6 +2527,7 @@ truncate_f(int opno, long r)
> off64_t off;
> struct stat64 stb;
> int v;
> + char st[1024];
>
> init_pathname(&f);
> if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) {
> @@ -2523,14 +2545,15 @@ truncate_f(int opno, long r)
> 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 %= maxfsize;
> e = truncate64_path(&f, off) < 0 ? errno : 0;
> check_cwd();
> if (v)
> - printf("%d/%d: truncate %s %lld %d\n", procid, opno, f.path,
> - (long long)off, e);
> + printf("%d/%d: truncate %s%s %lld %d\n", procid, opno, f.path,
> + st, (long long)off, e);
> free_pathname(&f);
> }
>
> @@ -2574,6 +2597,7 @@ unresvsp_f(int opno, long r)
> off64_t off;
> struct stat64 stb;
> int v;
> + char st[1024];
>
> init_pathname(&f);
> if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) {
> @@ -2600,6 +2624,7 @@ unresvsp_f(int opno, long r)
> close(fd);
> 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 %= maxfsize;
> @@ -2608,8 +2633,8 @@ unresvsp_f(int opno, long r)
> fl.l_len = (off64_t)(random() % (1 << 20));
> e = xfsctl(f.path, fd, XFS_IOC_UNRESVSP64, &fl) < 0 ? errno : 0;
> if (v)
> - printf("%d/%d: xfsctl(XFS_IOC_UNRESVSP64) %s %lld %lld %d\n",
> - procid, opno, f.path,
> + printf("%d/%d: xfsctl(XFS_IOC_UNRESVSP64) %s%s %lld %lld %d\n",
> + procid, opno, f.path, st,
> (long long)off, (long long)fl.l_len, e);
> free_pathname(&f);
> close(fd);
> @@ -2627,6 +2652,7 @@ write_f(int opno, long r)
> off64_t off;
> struct stat64 stb;
> int v;
> + char st[1024];
>
> init_pathname(&f);
> if (!get_fname(FT_REGm, r, &f, NULL, NULL, &v)) {
> @@ -2653,6 +2679,7 @@ write_f(int opno, long r)
> close(fd);
> 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 %= maxfsize;
> @@ -2663,8 +2690,8 @@ write_f(int opno, long r)
> e = write(fd, buf, len) < 0 ? errno : 0;
> free(buf);
> if (v)
> - printf("%d/%d: write %s [%lld,%d] %d\n",
> - procid, opno, f.path, (long long)off, (int)len, e);
> + printf("%d/%d: write %s%s [%lld,%d] %d\n",
> + procid, opno, f.path, st, (long long)off, (int)len, e);
> free_pathname(&f);
> close(fd);
> }
Looks good to me.
Reviewed-By: Phil White <pwhite@xxxxxxx>
Tested-By: Phil White <pwhite@xxxxxxx>
|