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 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.

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