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