Re: [PATCH][next] xfs: Replace one-element arrays with flexible-array members

From: Gustavo A. R. Silva
Date: Mon Feb 06 2023 - 14:17:21 EST




On 2/3/23 11:53, Kees Cook wrote:
On Thu, Feb 02, 2023 at 07:24:50PM -0600, Gustavo A. R. Silva wrote:
One-element arrays are deprecated, and we are replacing them with flexible
array members instead. So, replace one-element arrays with flexible-array
members in structures xfs_attr_leaf_name_local and
xfs_attr_leaf_name_remote.

The only binary differences reported after the changes are all like
these:

fs/xfs/libxfs/xfs_attr_leaf.o
_@@ -435,7 +435,7 @@
3b8: movzbl 0x2(%rbx),%eax
3bc: rol $0x8,%bp
3c0: movzwl %bp,%ebp
- 3c3: lea 0x2(%rax,%rbp,1),%ebx
+ 3c3: lea 0x3(%rax,%rbp,1),%ebx
3c7: call 3cc <xfs_attr_leaf_entsize+0x8c>
3c8: R_X86_64_PLT32 __tsan_func_exit-0x4
3cc: or $0x3,%ebx
_@@ -454,7 +454,7 @@
3ea: movzbl 0x8(%rbx),%ebx
3ee: call 3f3 <xfs_attr_leaf_entsize+0xb3>
3ef: R_X86_64_PLT32 __tsan_func_exit-0x4
- 3f3: add $0xa,%ebx
+ 3f3: add $0xb,%ebx
3f6: or $0x3,%ebx
3f9: add $0x1,%ebx
3fc: mov %ebx,%eax

similar changes in fs/xfs/scrub/attr.o and fs/xfs/xfs.o object files.

I usually turn off the sanitizers for the A/B build comparisons to make

Oh yes! that's a good point. I'll see that they are turned off next time. :)

it easier to read the results. It looks like it _grew_ in size here,
though?

Yep; I'm sorry I got it wrong. :/ I had it right in the beginning, then after
reading the code once again just before sending out a version of this patch
with only the flex-array transformations, I noticed the entsize functions and
the "sizeof(struct-with-one-element-array) - 1" and I forgot about the padding,
removed the "- 1" and got a bit confused with my build-tests.

I'll send v2 with my original changes... the flex-array transformations, only.

--
Gustavo