All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: linux-xfs@vger.kernel.org, fstests@vger.kernel.org
Subject: Re: [PATCH 5/5] fsx: support 64-bit operation counts
Date: Thu, 6 Feb 2020 09:51:28 -0800	[thread overview]
Message-ID: <20200206175128.GG6870@magnolia> (raw)
In-Reply-To: <20200206045728.GS14282@dhcp-12-102.nay.redhat.com>

On Thu, Feb 06, 2020 at 12:57:28PM +0800, Zorro Lang wrote:
> On Tue, Feb 04, 2020 at 04:02:13PM -0800, Darrick J. Wong wrote:
> > From: Darrick J. Wong <darrick.wong@oracle.com>
> > 
> > Support 64-bit operation counts so that we can run long-soak tests for
> > more than 2 billion fsxops.
> > 
> > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > ---
> >  ltp/fsx.c |   54 ++++++++++++++++++++++++++++--------------------------
> >  1 file changed, 28 insertions(+), 26 deletions(-)
> > 
> > 
> > diff --git a/ltp/fsx.c b/ltp/fsx.c
> > index 120f4374..02403720 100644
> > --- a/ltp/fsx.c
> > +++ b/ltp/fsx.c
> > @@ -135,12 +135,12 @@ int	fd;				/* fd for our test file */
> >  blksize_t	block_size = 0;
> >  off_t		file_size = 0;
> >  off_t		biggest = 0;
> > -unsigned long	testcalls = 0;		/* calls to function "test" */
> > +long long	testcalls = 0;		/* calls to function "test" */
> 
> Although the fsx still run passed for me, should we try to keep the sign of
> a variable type? That's fine to extend the size of the variable, but should we
> explain more about why we need to change the type from unsigned to signed?

testcalls is compared against simulatedopcount, which is a signed
variable, and we shouldn't really be mixing signs like that.

Hmm, maybe simulatedopcount should also be unsigned, since they're both
absolute counts of filesystem operations.  I figured that testcallsx and
simulatedopcount should both be signed because numops is also signed.
Granted, I guess numops is signed so that we can set it to the magic
value -1 and have fsx run "forever".

OFC I guess there's then the problem that if you ever hit 9Eops then
numops/simulatedopcount can become negative... <shrug>

--D

> Thanks,
> Zorro
> 
> >  
> > -unsigned long	simulatedopcount = 0;	/* -b flag */
> > +long long	simulatedopcount = 0;	/* -b flag */
> >  int	closeprob = 0;			/* -c flag */
> >  int	debug = 0;			/* -d flag */
> > -unsigned long	debugstart = 0;		/* -D flag */
> > +long long	debugstart = 0;		/* -D flag */
> >  char	filldata = 0;			/* -g flag */
> >  int	flush = 0;			/* -f flag */
> >  int	do_fsync = 0;			/* -y flag */
> > @@ -148,7 +148,7 @@ unsigned long	maxfilelen = 256 * 1024;	/* -l flag */
> >  int	sizechecks = 1;			/* -n flag disables them */
> >  int	maxoplen = 64 * 1024;		/* -o flag */
> >  int	quiet = 0;			/* -q flag */
> > -unsigned long progressinterval = 0;	/* -p flag */
> > +long long	progressinterval = 0;	/* -p flag */
> >  int	readbdy = 1;			/* -r flag */
> >  int	style = 0;			/* -s flag */
> >  int	prealloc = 0;			/* -x flag */
> > @@ -157,7 +157,7 @@ int	writebdy = 1;			/* -w flag */
> >  long	monitorstart = -1;		/* -m flag */
> >  long	monitorend = -1;		/* -m flag */
> >  int	lite = 0;			/* -L flag */
> > -long	numops = -1;			/* -N flag */
> > +long long numops = -1;			/* -N flag */
> >  int	randomoplen = 1;		/* -O flag disables it */
> >  int	seed = 1;			/* -S flag */
> >  int     mapped_writes = 1;              /* -W flag disables */
> > @@ -788,7 +788,7 @@ doread(unsigned offset, unsigned size)
> >  		       (monitorstart == -1 ||
> >  			(offset + size > monitorstart &&
> >  			(monitorend == -1 || offset <= monitorend))))))
> > -		prt("%lu read\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > +		prt("%lld read\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> >  		    offset, offset + size - 1, size);
> >  	ret = lseek(fd, (off_t)offset, SEEK_SET);
> >  	if (ret == (off_t)-1) {
> > @@ -925,7 +925,7 @@ domapread(unsigned offset, unsigned size)
> >  		       (monitorstart == -1 ||
> >  			(offset + size > monitorstart &&
> >  			(monitorend == -1 || offset <= monitorend))))))
> > -		prt("%lu mapread\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > +		prt("%lld mapread\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> >  		    offset, offset + size - 1, size);
> >  
> >  	pg_offset = offset & PAGE_MASK;
> > @@ -1003,7 +1003,7 @@ dowrite(unsigned offset, unsigned size)
> >  		       (monitorstart == -1 ||
> >  			(offset + size > monitorstart &&
> >  			(monitorend == -1 || offset <= monitorend))))))
> > -		prt("%lu write\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > +		prt("%lld write\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> >  		    offset, offset + size - 1, size);
> >  	ret = lseek(fd, (off_t)offset, SEEK_SET);
> >  	if (ret == (off_t)-1) {
> > @@ -1070,7 +1070,7 @@ domapwrite(unsigned offset, unsigned size)
> >  		       (monitorstart == -1 ||
> >  			(offset + size > monitorstart &&
> >  			(monitorend == -1 || offset <= monitorend))))))
> > -		prt("%lu mapwrite\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > +		prt("%lld mapwrite\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> >  		    offset, offset + size - 1, size);
> >  
> >  	if (file_size > cur_filesize) {
> > @@ -1123,11 +1123,12 @@ dotruncate(unsigned size)
> >  
> >  	if (testcalls <= simulatedopcount)
> >  		return;
> > -	
> > +
> >  	if ((progressinterval && testcalls % progressinterval == 0) ||
> >  	    (debug && (monitorstart == -1 || monitorend == -1 ||
> >  		      size <= monitorend)))
> > -		prt("%lu trunc\tfrom 0x%x to 0x%x\n", testcalls, oldsize, size);
> > +		prt("%lld trunc\tfrom 0x%x to 0x%x\n", testcalls, oldsize,
> > +				size);
> >  	if (ftruncate(fd, (off_t)size) == -1) {
> >  	        prt("ftruncate1: %x\n", size);
> >  		prterr("dotruncate: ftruncate");
> > @@ -1168,7 +1169,7 @@ do_punch_hole(unsigned offset, unsigned length)
> >  	if ((progressinterval && testcalls % progressinterval == 0) ||
> >  	    (debug && (monitorstart == -1 || monitorend == -1 ||
> >  		      end_offset <= monitorend))) {
> > -		prt("%lu punch\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > +		prt("%lld punch\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> >  			offset, offset+length, length);
> >  	}
> >  	if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> > @@ -1230,7 +1231,7 @@ do_zero_range(unsigned offset, unsigned length, int keep_size)
> >  	if ((progressinterval && testcalls % progressinterval == 0) ||
> >  	    (debug && (monitorstart == -1 || monitorend == -1 ||
> >  		      end_offset <= monitorend))) {
> > -		prt("%lu zero\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > +		prt("%lld zero\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> >  			offset, offset+length, length);
> >  	}
> >  	if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> > @@ -1280,8 +1281,8 @@ do_collapse_range(unsigned offset, unsigned length)
> >  	if ((progressinterval && testcalls % progressinterval == 0) ||
> >  	    (debug && (monitorstart == -1 || monitorend == -1 ||
> >  		      end_offset <= monitorend))) {
> > -		prt("%lu collapse\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > -			offset, offset+length, length);
> > +		prt("%lld collapse\tfrom 0x%x to 0x%x, (0x%x bytes)\n",
> > +				testcalls, offset, offset+length, length);
> >  	}
> >  	if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> >  		prt("collapse range: 0x%x to 0x%x\n", offset, offset + length);
> > @@ -1332,7 +1333,7 @@ do_insert_range(unsigned offset, unsigned length)
> >  	if ((progressinterval && testcalls % progressinterval == 0) ||
> >  	    (debug && (monitorstart == -1 || monitorend == -1 ||
> >  		      end_offset <= monitorend))) {
> > -		prt("%lu insert\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > +		prt("%lld insert\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> >  			offset, offset+length, length);
> >  	}
> >  	if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> > @@ -1724,7 +1725,7 @@ do_preallocate(unsigned offset, unsigned length, int keep_size)
> >  	if ((progressinterval && testcalls % progressinterval == 0) ||
> >  	    (debug && (monitorstart == -1 || monitorend == -1 ||
> >  		      end_offset <= monitorend)))
> > -		prt("%lu falloc\tfrom 0x%x to 0x%x (0x%x bytes)\n", testcalls,
> > +		prt("%lld falloc\tfrom 0x%x to 0x%x (0x%x bytes)\n", testcalls,
> >  				offset, offset + length, length);
> >  	if (fallocate(fd, keep_size ? FALLOC_FL_KEEP_SIZE : 0, (loff_t)offset, (loff_t)length) == -1) {
> >  	        prt("fallocate: 0x%x to 0x%x\n", offset, offset + length);
> > @@ -1773,7 +1774,7 @@ docloseopen(void)
> >  		return;
> >  
> >  	if (debug)
> > -		prt("%lu close/open\n", testcalls);
> > +		prt("%lld close/open\n", testcalls);
> >  	if (close(fd)) {
> >  		prterr("docloseopen: close");
> >  		report_failure(180);
> > @@ -1797,7 +1798,7 @@ dofsync(void)
> >  	if (testcalls <= simulatedopcount)
> >  		return;
> >  	if (debug)
> > -		prt("%lu fsync\n", testcalls);
> > +		prt("%lld fsync\n", testcalls);
> >  	log4(OP_FSYNC, 0, 0, 0);
> >  	ret = fsync(fd);
> >  	if (ret < 0) {
> > @@ -1834,7 +1835,7 @@ cleanup(int sig)
> >  {
> >  	if (sig)
> >  		prt("signal %d\n", sig);
> > -	prt("testcalls = %lu\n", testcalls);
> > +	prt("testcalls = %lld\n", testcalls);
> >  	exit(sig);
> >  }
> >  
> > @@ -1942,7 +1943,7 @@ test(void)
> >  		debug = 1;
> >  
> >  	if (!quiet && testcalls < simulatedopcount && testcalls % 100000 == 0)
> > -		prt("%lu...\n", testcalls);
> > +		prt("%lld...\n", testcalls);
> >  
> >  	if (replayopsf) {
> >  		struct log_entry log_entry;
> > @@ -2293,13 +2294,13 @@ usage(void)
> >  }
> >  
> >  
> > -int
> > +long long
> >  getnum(char *s, char **e)
> >  {
> > -	int ret;
> > +	long long ret;
> >  
> >  	*e = (char *) 0;
> > -	ret = strtol(s, e, 0);
> > +	ret = strtoll(s, e, 0);
> >  	if (*e)
> >  		switch (**e) {
> >  		case 'b':
> > @@ -2487,7 +2488,8 @@ main(int argc, char **argv)
> >  		case 'b':
> >  			simulatedopcount = getnum(optarg, &endp);
> >  			if (!quiet)
> > -				prt("Will begin at operation %ld\n", simulatedopcount);
> > +				prt("Will begin at operation %lld\n",
> > +						simulatedopcount);
> >  			if (simulatedopcount == 0)
> >  				usage();
> >  			simulatedopcount -= 1;
> > @@ -2854,7 +2856,7 @@ main(int argc, char **argv)
> >  		prterr("close");
> >  		report_failure(99);
> >  	}
> > -	prt("All %lu operations completed A-OK!\n", testcalls);
> > +	prt("All %lld operations completed A-OK!\n", testcalls);
> >  	if (recordops)
> >  		logdump();
> >  
> > 
> 

      reply	other threads:[~2020-02-06 17:51 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-05  0:01 [PATCH 0/5] fstests: random fixes Darrick J. Wong
2020-02-05  0:01 ` [PATCH 1/5] xfs/449: filter out "Discarding..." from output Darrick J. Wong
2020-02-06  4:44   ` Zorro Lang
2020-02-05  0:01 ` [PATCH 2/5] xfs/020: fix truncation test Darrick J. Wong
2020-02-06  4:44   ` Zorro Lang
2020-02-05  0:02 ` [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value Darrick J. Wong
2020-02-05  6:55   ` Amir Goldstein
2020-02-09 15:29   ` Eryu Guan
2020-02-11 15:20     ` Darrick J. Wong
2020-02-05  0:02 ` [PATCH 4/5] xfs/117: fix inode corruption loop Darrick J. Wong
2020-02-06  4:50   ` Zorro Lang
2020-02-05  0:02 ` [PATCH 5/5] fsx: support 64-bit operation counts Darrick J. Wong
2020-02-06  4:57   ` Zorro Lang
2020-02-06 17:51     ` Darrick J. Wong [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200206175128.GG6870@magnolia \
    --to=darrick.wong@oracle.com \
    --cc=fstests@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.