Re: [PATCH] xfs_repair: stop using ->data_entry_p()

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

 



On Fri, Jan 17, 2020 at 05:17:11PM -0600, Eric Sandeen wrote:
> The ->data_entry_p() op went away in v5.5 kernelspace, so rework
> xfs_repair to use ->data_entry_offset instead, in preparation
> for the v5.5 libxfs backport.
> 
> This could later be cleaned up to use offsets as was done
> in kernel commit 8073af5153c for example.

See, now that you've said that, I start wondering why not do that?

:D

> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
> ---
> 
> I'll munge this patch in mid-libxfs-sync, just before the
> ->data_entry_p removal patch.
> 
> diff --git a/repair/dir2.c b/repair/dir2.c
> index 4ac0084e..2494f3c4 100644
> --- a/repair/dir2.c
> +++ b/repair/dir2.c
> @@ -580,7 +580,7 @@ process_dir2_data(
>  
>  	d = bp->b_addr;
>  	bf = M_DIROPS(mp)->data_bestfree_p(d);
> -	ptr = (char *)M_DIROPS(mp)->data_entry_p(d);
> +	ptr = (char *)d + M_DIROPS(mp)->data_entry_offset;
>  	badbest = lastfree = freeseen = 0;
>  	if (be16_to_cpu(bf[0].length) == 0) {
>  		badbest |= be16_to_cpu(bf[0].offset) != 0;
> @@ -646,7 +646,7 @@ process_dir2_data(
>  			do_warn(_("\twould junk block\n"));
>  		return 1;
>  	}
> -	ptr = (char *)M_DIROPS(mp)->data_entry_p(d);
> +	ptr = (char *)d + M_DIROPS(mp)->data_entry_offset;
>  	/*
>  	 * Process the entries now.
>  	 */
> diff --git a/repair/phase6.c b/repair/phase6.c
> index 91d208a6..d61b2ae7 100644
> --- a/repair/phase6.c
> +++ b/repair/phase6.c
> @@ -1530,7 +1530,7 @@ longform_dir2_entry_check_data(
>  
>  	bp = *bpp;
>  	d = bp->b_addr;
> -	ptr = (char *)M_DIROPS(mp)->data_entry_p(d);
> +	ptr = (char *)d + M_DIROPS(mp)->data_entry_offset;
>  	nbad = 0;
>  	needscan = needlog = 0;
>  	junkit = 0;
> @@ -1590,7 +1590,7 @@ longform_dir2_entry_check_data(
>  				break;
>  
>  			/* check for block with no data entries */
> -			if ((ptr == (char *)M_DIROPS(mp)->data_entry_p(d)) &&
> +			if ((ptr == (char *)d + M_DIROPS(mp)->data_entry_offset) &&
>  			    (ptr + be16_to_cpu(dup->length) >= endptr)) {
>  				junkit = 1;
>  				*num_illegal += 1;
> @@ -1659,7 +1659,7 @@ longform_dir2_entry_check_data(
>  			do_warn(_("would fix magic # to %#x\n"), wantmagic);
>  	}
>  	lastfree = 0;
> -	ptr = (char *)M_DIROPS(mp)->data_entry_p(d);
> +	ptr = (char *)d + M_DIROPS(mp)->data_entry_offset;
>  	/*
>  	 * look at each entry.  reference inode pointed to by each
>  	 * entry in the incore inode tree.
> @@ -1834,7 +1834,7 @@ longform_dir2_entry_check_data(
>  			       (dep->name[0] == '.' && dep->namelen == 1));
>  			add_inode_ref(current_irec, current_ino_offset);
>  			if (da_bno != 0 ||
> -			    dep != M_DIROPS(mp)->data_entry_p(d)) {
> +			    dep != (void *)d + M_DIROPS(mp)->data_entry_offset) {

Er.... void pointer arithmetic?

(Though I really do wish the original author of the kernel patchset had
supplied a xfsprogs port of the kernel patches so we maintainers don't
get stuck doing all the porting work...)

--D

>  				/* "." should be the first entry */
>  				nbad++;
>  				if (entry_junked(
> 



[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