On 1/25/21 3:58 AM, Chandan Babu R wrote: > The first argument passed to qsort() in fsrfs() is an array of "struct > xfs_bulkstat". Hence the two arguments to the cmp() function must be > interpreted as being of type "struct xfs_bulkstat *" as against "struct > xfs_bstat *" that is being used to currently typecast them. > > Signed-off-by: Chandan Babu R <chandanrlinux@xxxxxxxxx> Yikes. Broken since 5.3.0, and the structures have different sizes and different bs_extents offsets. :( Fixes: 4cca629d6 ("misc: convert xfrog_bulkstat functions to have v5 semantics") Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx> At least it's only affecting the whole-fs defragment which is generally not recommended, but is still available and does get used. I wonder if it explains this bug report: Jan 07 20:52:44 <Tharn> hey, quick question... the first time I ran xfs_fsr last night, it ran for 2 hours and looking at the console log, it ended with a lot of "start inode=0" repeating > --- > fsr/xfs_fsr.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/fsr/xfs_fsr.c b/fsr/xfs_fsr.c > index 77a10a1d..635e4c70 100644 > --- a/fsr/xfs_fsr.c > +++ b/fsr/xfs_fsr.c > @@ -702,9 +702,8 @@ out0: > int > cmp(const void *s1, const void *s2) > { > - return( ((struct xfs_bstat *)s2)->bs_extents - > - ((struct xfs_bstat *)s1)->bs_extents); > - > + return( ((struct xfs_bulkstat *)s2)->bs_extents - > + ((struct xfs_bulkstat *)s1)->bs_extents); > } > > /* >