xfs
[Top] [All Lists]

Re: [1/8] xfstests: fsstress dump inode info when possible

To: Dmitry Monakhov <dmonakhov@xxxxxxxxxx>
Subject: Re: [1/8] xfstests: fsstress dump inode info when possible
From: Phil White <pwhite@xxxxxxx>
Date: Fri, 2 Dec 2011 15:27:14 -0800
Cc: xfs@xxxxxxxxxxx
User-agent: Mutt/1.5.21 (2010-09-15)
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>

<Prev in Thread] Current Thread [Next in Thread>
  • Re: [1/8] xfstests: fsstress dump inode info when possible, Phil White <=