Fix remaining warnings in "testcases/kernel/fs/fsstress/fsstress.c".
Three of them are due to mismatches between fprintf() conversion
specifications and the variables being formatted.  Fix these by
casting the variables to the right type.

Two others are due to the use of a __uint64_t local variable to
represent a value of type __u64 (which evidently can be defined
differently in some environments).  Fix these by using the exact
matching type in the cases that produce the warning messages.

Updated to address the concern raised by Garrett Cooper about the
use of types that are not identical to what's used in the XFS
ioctl() interface in the kernel.  Also added memset() calls so we're
sure no garbage resides in data structures passed between user space
and the kernel.

Signed-off-by: Alex Elder <[email protected]>

---
 ltp/fsstress.c |   83
+++++++++++++++++++++++++++++++++------------------------
 1 file changed, 49 insertions(+), 34 deletions(-)

Index: b/ltp/fsstress.c
===================================================================
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -419,6 +419,7 @@ int main(int argc, char **argv)
                }
 #ifndef NO_XFS
                if (!no_xfs) {
+               memset(&geom, 0, sizeof geom);
                i = ioctl(fd, XFS_IOC_FSGEOMETRY, &geom);
                if (i >= 0 && geom.rtblocks)
                        rtpct = MIN(MAX(geom.rtblocks * 100 /
@@ -447,6 +448,7 @@ int main(int argc, char **argv)
                                errtag += (random() % (XFS_ERRTAG_MAX -
errtag));
                        }
                        printf("Injecting failure on tag #%d\n",
errtag);
+                       memset(&err_inj, 0, sizeof err_inj);
                        err_inj.errtag = errtag;
                        err_inj.fd = fd;
                        srval = ioctl(fd, XFS_IOC_ERROR_INJECTION,
&err_inj);
@@ -476,6 +478,7 @@ int main(int argc, char **argv)
                }
 #ifndef NO_XFS
                if (errtag != 0) {
+                       memset(&err_inj, 0, sizeof err_inj);
                        err_inj.errtag = 0;
                        err_inj.fd = fd;
                        if ((srval = ioctl(fd, XFS_IOC_ERROR_CLEARALL,
&err_inj)) != 0) {
@@ -1396,9 +1399,9 @@ allocsp_f(int opno, long r)
        int             e;
        pathname_t      f;
        int             fd;
-       struct flock64  fl;
-       __int64_t       lr;
-       off64_t         off;
+       struct xfs_flock64 fl;
+       __s64           lr;
+       __s64           off;
        struct stat64   stb;
        int             v;
 
@@ -1427,9 +1430,10 @@ allocsp_f(int opno, long r)
                close(fd);
                return;
        }
-       lr = ((__int64_t)random() << 32) + random();
-       off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024),
MAXFSIZE));
+       lr = ((__s64) random() << 32) + random();
+       off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE);
        off %= maxfsize;
+       memset(&fl, 0, sizeof fl);
        fl.l_whence = SEEK_SET;
        fl.l_start = off;
        fl.l_len = 0;
@@ -1547,10 +1551,10 @@ attr_set_f(int opno, long r)
 void
 bulkstat_f(int opno, long r)
 {
-       int             count;
+       __s32           count;
        int             fd;
-       __uint64_t      last;
-       int             nent;
+       __u64           last;
+       __s32           nent;
        xfs_bstat_t     *t;
        __int64_t       total;
        xfs_fsop_bulkreq_t bsr;
@@ -1561,6 +1565,7 @@ bulkstat_f(int opno, long r)
        fd = open(".", O_RDONLY);
        total = 0;
 
+       memset(&bsr, 0, sizeof bsr);
        bsr.lastip=&last;
        bsr.icount=nent;
        bsr.ubuffer=t;
@@ -1571,7 +1576,7 @@ bulkstat_f(int opno, long r)
        free(t);
        if (verbose)
                printf("%d/%d: bulkstat nent %d total %lld\n",
-                       procid, opno, nent, (long long)total);
+                       procid, opno, (int) nent, (long long) total);
        close(fd);
 }
 
@@ -1582,7 +1587,7 @@ bulkstat1_f(int opno, long r)
        pathname_t      f;
        int             fd;
        int             good;
-       __uint64_t      ino;
+       __u64           ino;
        struct stat64   s;
        xfs_bstat_t     t;
        int             v;
@@ -1617,6 +1622,7 @@ bulkstat1_f(int opno, long r)
        }
        fd = open(".", O_RDONLY);
 
+       memset(&bsr, 0, sizeof bsr);
        bsr.lastip=&ino;
        bsr.icount=1;
        bsr.ubuffer=&t;
@@ -1625,7 +1631,8 @@ bulkstat1_f(int opno, long r)
        e = ioctl(fd, XFS_IOC_FSBULKSTAT_SINGLE, &bsr) < 0 ? errno : 0;
        if (v)
                printf("%d/%d: bulkstat1 %s ino %lld %d\n",
-                       procid, opno, good?"real":"random",
(int64_t)ino, e);
+                       procid, opno, good ? "real" : "random",
+                       (long long) ino, e);
        close(fd);
 }
 
@@ -1698,6 +1705,7 @@ creat_f(int opno, long r)
        if (fd >= 0) {
 #ifndef NO_XFS
                struct fsxattr  a;
+               memset(&a, 0, sizeof a);
                if (extsize && ioctl(fd, XFS_IOC_FSGETXATTR, &a) >= 0) {
                        a.fsx_xflags |= XFS_XFLAG_REALTIME;
                        a.fsx_extsize =
@@ -1799,6 +1807,7 @@ dread_f(int opno, long r)
                return;
        }
 
+       memset(&diob, 0, sizeof diob);
        if (no_xfs) {
                diob.d_miniosz = stb.st_blksize;
                diob.d_maxiosz = stb.st_blksize * 256;  /* good number ?
*/
@@ -1889,6 +1898,7 @@ dwrite_f(int opno, long r)
                close(fd);
                return;
        }
+       memset(&diob, 0, sizeof diob);
        if (no_xfs) {
                diob.d_miniosz = stb.st_blksize;
                diob.d_maxiosz = stb.st_blksize * 256;  /* good number ?
*/
@@ -1976,9 +1986,9 @@ freesp_f(int opno, long r)
        int             e;
        pathname_t      f;
        int             fd;
-       struct flock64  fl;
-       __int64_t       lr;
-       off64_t         off;
+       struct xfs_flock64 fl;
+       __s64           lr;
+       __s64           off;
        struct stat64   stb;
        int             v;
 
@@ -2007,16 +2017,17 @@ freesp_f(int opno, long r)
                close(fd);
                return;
        }
-       lr = ((__int64_t)random() << 32) + random();
-       off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024),
MAXFSIZE));
+       lr = ((__s64) random() << 32) + random();
+       off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE);
        off %= maxfsize;
+       memset(&fl, 0, sizeof fl);
        fl.l_whence = SEEK_SET;
        fl.l_start = off;
        fl.l_len = 0;
        e = ioctl(fd, XFS_IOC_FREESP64, &fl) < 0 ? errno : 0;
        if (v)
                printf("%d/%d: ioctl(XFS_IOC_FREESP64) %s %lld 0 %d\n",
-                       procid, opno, f.path, (long long)off, e);
+                       procid, opno, f.path, (long long) off, e);
        free_pathname(&f);
        close(fd);
 }
@@ -2349,9 +2360,9 @@ resvsp_f(int opno, long r)
        int             e;
        pathname_t      f;
        int             fd;
-       struct flock64  fl;
-       __int64_t       lr;
-       off64_t         off;
+       struct xfs_flock64 fl;
+       __s64           lr;
+       __s64           off;
        struct stat64   stb;
        int             v;
 
@@ -2380,16 +2391,18 @@ resvsp_f(int opno, long r)
                close(fd);
                return;
        }
-       lr = ((__int64_t)random() << 32) + random();
-       off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024),
MAXFSIZE));
+       lr = ((__s64) random() << 32) + random();
+       off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE);
        off %= maxfsize;
+       memset(&fl, 0, sizeof fl);
        fl.l_whence = SEEK_SET;
        fl.l_start = off;
-       fl.l_len = (off64_t)(random() % (1024 * 1024));
+       fl.l_len = (__s64) (random() % (1024 * 1024));
        e = ioctl(fd, XFS_IOC_RESVSP64, &fl) < 0 ? errno : 0;
        if (v)
-               printf("%d/%d: ioctl(XFS_IOC_RESVSP64) %s %lld %ld %d
\n",
-                       procid, opno, f.path, (long long)off, fl.l_len,
e);
+               printf("%d/%d: ioctl(XFS_IOC_RESVSP64) %s %lld %lld %d
\n",
+                       procid, opno, f.path, (long long) off,
+                       (long long) fl.l_len, e);
        free_pathname(&f);
        close(fd);
 }
@@ -2524,7 +2537,7 @@ truncate_f(int opno, long r)
                return;
        }
        lr = ((__int64_t)random() << 32) + random();
-       off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024),
MAXFSIZE));
+       off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE);
        off %= maxfsize;
        e = truncate64_path(&f, off) < 0 ? errno : 0;
        check_cwd();
@@ -2566,9 +2579,9 @@ unresvsp_f(int opno, long r)
        int             e;
        pathname_t      f;
        int             fd;
-       struct flock64  fl;
-       __int64_t       lr;
-       off64_t         off;
+       struct xfs_flock64 fl;
+       __s64           lr;
+       __s64           off;
        struct stat64   stb;
        int             v;
 
@@ -2597,16 +2610,18 @@ unresvsp_f(int opno, long r)
                close(fd);
                return;
        }
-       lr = ((__int64_t)random() << 32) + random();
-       off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024),
MAXFSIZE));
+       lr = ((__s64) random() << 32) + random();
+       off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE);
        off %= maxfsize;
+       memset(&fl, 0, sizeof fl);
        fl.l_whence = SEEK_SET;
        fl.l_start = off;
-       fl.l_len = (off64_t)(random() % (1 << 20));
+       fl.l_len = (__s64) (random() % (1 << 20));
        e = ioctl(fd, XFS_IOC_UNRESVSP64, &fl) < 0 ? errno : 0;
        if (v)
-               printf("%d/%d: ioctl(XFS_IOC_UNRESVSP64) %s %lld %ld %d
\n",
-                       procid, opno, f.path, (long long)off, fl.l_len,
e);
+               printf("%d/%d: ioctl(XFS_IOC_UNRESVSP64) %s %lld %lld %d
\n",
+                       procid, opno, f.path, (long long) off,
+                       (long long) fl.l_len, e);
        free_pathname(&f);
        close(fd);
 }


------------------------------------------------------------------------------
Forrester Wave Report
Recovery time is now measured in hours and minutes not days.
key insights are discussed in the 2010 Forrester Wave Report as
part of an in-depth evaluation of disaster recovery service providers.
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to