Re: [PATCH] fsx: remove XFS_IOC_ALLOCSP operation entirely

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 30, 2022 at 08:52:00AM -0700, Darrick J. Wong wrote:
> On Wed, Mar 30, 2022 at 01:25:06PM +0800, Zorro Lang wrote:
> > Due to XFS_IOC_ALLOCSP is nearly retired from linux xfs, and the
> > ALLOCSP testing in fsx easily trigger errors. So compare with
> > disable it by default, I'd like to remove it entirely. So this
> > patch revert two patches:
> > cd99a499 ("fsx: disable allocsp_calls if -F is specified")
> > a32fb1bb ("fsx: add support for XFS_IOC_ALLOCSP")
> > 
> > Signed-off-by: Zorro Lang <zlang@xxxxxxxxxx>
> 
> Hmm.  fsstress and iogen also use ALLOCSP/FREESP, so perhaps they should
> also get cleaned out?  I guess the difference here is that fsx errors
> out if the call fails, whereas the other two have some ability to try
> alternate means. <shrug>
> 
> *oh* Now I realize why there was a complaint about this -- I added that
> allocsp_calls variable to guard against the case where fsx is built with
> old uapi headers but run on a new kernel, but nowhere do we actually
> gate ALLOCSP usage with allocsp_calls.

Yes, it is! Compare with fsstress, if we test on filesystems which don't support
IOC_ALLOCSP. We have to use "-F" option, but "-F" will disable "fallocate" either,
that's not what we want.

But fsstress won't fail even if allocsp_f() fails. We can talk about if fsstress
need to remove IOC_ALLOCSP. But for fsx, better to disable it by default at
least(and use another option to enable it), or remove it as you suggested :)

> 
> Anyway, ALLOCSP was broken for decades and is now gone, so:
> Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx>
> 
> --D
> 
> > ---
> > 
> > Hi,
> > 
> > As we talked in:
> > https://lore.kernel.org/fstests/20220330045718.wqrarqorslzaeks5@zlang-mailbox/T/#t
> > 
> > We have two choices:
> > 1) Disable ALLOCSP from fsx by default, and give it another option to enable it
> >    manually if someone need it.
> > 2) Remove the ALLOCSP support from fsx entirely
> > 
> > As Darrick's suggestion, this patch choose the 2nd one. Please review and feel
> > free to tell me if you have other suggestions.
> > 
> > Thanks,
> > Zorro
> > 
> >  ltp/fsx.c | 111 +-----------------------------------------------------
> >  1 file changed, 2 insertions(+), 109 deletions(-)
> > 
> > diff --git a/ltp/fsx.c b/ltp/fsx.c
> > index 3ee37fe8..12c2cc33 100644
> > --- a/ltp/fsx.c
> > +++ b/ltp/fsx.c
> > @@ -111,7 +111,6 @@ enum {
> >  	OP_CLONE_RANGE,
> >  	OP_DEDUPE_RANGE,
> >  	OP_COPY_RANGE,
> > -	OP_ALLOCSP,
> >  	OP_MAX_FULL,
> >  
> >  	/* integrity operations */
> > @@ -166,7 +165,6 @@ int	randomoplen = 1;		/* -O flag disables it */
> >  int	seed = 1;			/* -S flag */
> >  int     mapped_writes = 1;              /* -W flag disables */
> >  int     fallocate_calls = 1;            /* -F flag disables */
> > -int     allocsp_calls = 1;		/* -F flag disables */
> >  int     keep_size_calls = 1;            /* -K flag disables */
> >  int     punch_hole_calls = 1;           /* -H flag disables */
> >  int     zero_range_calls = 1;           /* -z flag disables */
> > @@ -270,7 +268,6 @@ static const char *op_names[] = {
> >  	[OP_DEDUPE_RANGE] = "dedupe_range",
> >  	[OP_COPY_RANGE] = "copy_range",
> >  	[OP_FSYNC] = "fsync",
> > -	[OP_ALLOCSP] = "allocsp",
> >  };
> >  
> >  static const char *op_name(int operation)
> > @@ -413,15 +410,6 @@ logdump(void)
> >  			if (overlap)
> >  				prt("\t******WWWW");
> >  			break;
> > -		case OP_ALLOCSP:
> > -			down = lp->args[1] < lp->args[2];
> > -			prt("ALLOCSP  %s\tfrom 0x%x to 0x%x",
> > -			    down ? "DOWN" : "UP", lp->args[2], lp->args[1]);
> > -			overlap = badoff >= lp->args[1 + !down] &&
> > -				  badoff < lp->args[1 + !!down];
> > -			if (overlap)
> > -				prt("\t******NNNN");
> > -			break;
> >  		case OP_FALLOCATE:
> >  			/* 0: offset 1: length 2: where alloced */
> >  			prt("FALLOC   0x%x thru 0x%x\t(0x%x bytes) ",
> > @@ -1707,51 +1695,6 @@ do_copy_range(unsigned offset, unsigned length, unsigned dest)
> >  }
> >  #endif
> >  
> > -#ifdef XFS_IOC_ALLOCSP
> > -/* allocsp is an old Irix ioctl that either truncates or does extending preallocaiton */
> > -void
> > -do_allocsp(unsigned new_size)
> > -{
> > -	struct xfs_flock64	fl;
> > -
> > -	if (new_size > biggest) {
> > -		biggest = new_size;
> > -		if (!quiet && testcalls > simulatedopcount)
> > -			prt("allocsping to largest ever: 0x%x\n", new_size);
> > -	}
> > -
> > -	log4(OP_ALLOCSP, 0, new_size, FL_NONE);
> > -
> > -	if (new_size > file_size)
> > -		memset(good_buf + file_size, '\0', new_size - file_size);
> > -	file_size = new_size;
> > -
> > -	if (testcalls <= simulatedopcount)
> > -		return;
> > -
> > -	if ((progressinterval && testcalls % progressinterval == 0) ||
> > -	    (debug && (monitorstart == -1 || monitorend == -1 ||
> > -		      new_size <= monitorend)))
> > -		prt("%lld allocsp\tat 0x%x\n", testcalls, new_size);
> > -
> > -	fl.l_whence = SEEK_SET;
> > -	fl.l_start = new_size;
> > -	fl.l_len = 0;
> > -
> > -	if (ioctl(fd, XFS_IOC_ALLOCSP, &fl) == -1) {
> > -	        prt("allocsp: 0x%x\n", new_size);
> > -		prterr("do_allocsp: allocsp");
> > -		report_failure(161);
> > -	}
> > -}
> > -#else
> > -void
> > -do_allocsp(unsigned new_isize)
> > -{
> > -	return;
> > -}
> > -#endif
> > -
> >  #ifdef HAVE_LINUX_FALLOC_H
> >  /* fallocate is basically a no-op unless extending, then a lot like a truncate */
> >  void
> > @@ -2097,8 +2040,6 @@ test(void)
> >  		if (fallocate_calls && size && keep_size_calls)
> >  			keep_size = random() % 2;
> >  		break;
> > -	case OP_ALLOCSP:
> > -		break;
> >  	case OP_ZERO_RANGE:
> >  		if (zero_range_calls && size && keep_size_calls)
> >  			keep_size = random() % 2;
> > @@ -2125,12 +2066,6 @@ have_op:
> >  		if (!mapped_writes)
> >  			op = OP_WRITE;
> >  		break;
> > -	case OP_ALLOCSP:
> > -		if (!allocsp_calls) {
> > -			log4(OP_FALLOCATE, 0, size, FL_SKIPPED);
> > -			goto out;
> > -		}
> > -		break;
> >  	case OP_FALLOCATE:
> >  		if (!fallocate_calls) {
> >  			log4(OP_FALLOCATE, offset, size, FL_SKIPPED);
> > @@ -2206,10 +2141,6 @@ have_op:
> >  		dotruncate(size);
> >  		break;
> >  
> > -	case OP_ALLOCSP:
> > -		do_allocsp(size);
> > -		break;
> > -
> >  	case OP_FALLOCATE:
> >  		TRIM_OFF_LEN(offset, size, maxfilelen);
> >  		do_preallocate(offset, size, keep_size);
> > @@ -2339,8 +2270,8 @@ usage(void)
> >  "	-U: Use the IO_URING system calls, -U excludes -A\n"
> >   #endif
> >  "	-D startingop: debug output starting at specified operation\n"
> > -#if defined(HAVE_LINUX_FALLOC_H) || defined(XFS_IOC_ALLOCSP)
> > -"	-F: Do not use fallocate (preallocation) or XFS_IOC_ALLOCSP calls\n"
> > +#ifdef HAVE_LINUX_FALLOC_H
> > +"	-F: Do not use fallocate (preallocation) calls\n"
> >  #endif
> >  #ifdef FALLOC_FL_PUNCH_HOLE
> >  "	-H: Do not use punch hole calls\n"
> > @@ -2656,41 +2587,6 @@ __test_fallocate(int mode, const char *mode_str)
> >  #endif
> >  }
> >  
> > -int
> > -test_allocsp()
> > -{
> > -#ifdef XFS_IOC_ALLOCSP
> > -	struct xfs_flock64	fl;
> > -	int			ret = 0;
> > -
> > -	if (lite)
> > -		return 0;
> > -
> > -	fl.l_whence = SEEK_SET;
> > -	fl.l_start = 1;
> > -	fl.l_len = 0;
> > -
> > -	ret = ioctl(fd, XFS_IOC_ALLOCSP, &fl);
> > -	if (ret == -1 && (errno == ENOTTY || errno == EOPNOTSUPP)) {
> > -		if (!quiet)
> > -			fprintf(stderr,
> > -				"main: filesystem does not support "
> > -				"XFS_IOC_ALLOCSP, disabling!\n");
> > -		return 0;
> > -	}
> > -
> > -	ret = ftruncate(fd, file_size);
> > -	if (ret) {
> > -		warn("main: ftruncate");
> > -		exit(132);
> > -	}
> > -
> > -	return 1;
> > -#else
> > -	return 0;
> > -#endif
> > -}
> > -
> >  static struct option longopts[] = {
> >  	{"replay-ops", required_argument, 0, 256},
> >  	{"record-ops", optional_argument, 0, 255},
> > @@ -2835,7 +2731,6 @@ main(int argc, char **argv)
> >  			break;
> >  		case 'F':
> >  			fallocate_calls = 0;
> > -			allocsp_calls = 0;
> >  			break;
> >  		case 'K':
> >  			keep_size_calls = 0;
> > @@ -3077,8 +2972,6 @@ main(int argc, char **argv)
> >  
> >  	if (fallocate_calls)
> >  		fallocate_calls = test_fallocate(0);
> > -	if (allocsp_calls)
> > -		allocsp_calls = test_allocsp(0);
> >  	if (keep_size_calls)
> >  		keep_size_calls = test_fallocate(FALLOC_FL_KEEP_SIZE);
> >  	if (punch_hole_calls)
> > -- 
> > 2.31.1
> > 
> 




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux