On 09/04/2019 13:21, Steven Whitehouse wrote:
Hi,

On 09/04/2019 13:18, Andrew Price wrote:
On 09/04/2019 13:03, Christoph Hellwig wrote:
On Tue, Apr 09, 2019 at 10:41:53AM +0100, Andrew Price wrote:
Give gfs2-utils its own copy of gfs2_ondisk.h which uses userspace
types. This allows us to always support the latest ondisk structures and
obsoletes a lot of #ifdef GFS2_HAS_<FEATURE> blocks and configure.ac
checks.

gfs2_ondisk.h was changed simply by search-and-replace of the kernel int
types with the uintN_t, i.e.:

:%s/__u\(8\|16\|32\|64\)/uint\1_t/g
:%s/__be\(64\|32\|16\|8\)/uint\1_t/g

and the linux/types.h include replaced with stdint.h

Why?

Because I'd like to be able to build gfs2-utils on FreeBSD one day. Plus we get the handy stuff in inttypes.h to use, Linux doesn't have that.

At least the be types give you really useful type checking with
sparse, which can be trivially wired up in userspace as well.

If you mean the bitwise annotations that only sparse checks, we're fairly safe in gfs2-utils in that anything represented by a struct is going to have been parsed through one of the libgfs2/ondisk.c functions so will be the right endianness. I run sparse over this code very rarely anyway.

Those conversion functions are not sensible, thats why we got rid of them from the kernel code.

Is it the functions that aren't sensible or the use of the gfs2_ondisk.h structs as the containers for the native endian data? I'm not sure I get why the kernel functions like gfs2_dinode_in() are considered sensible and gfs2-utils' gfs2_dinode_in(), which does a similar thing but with a different struct, isn't sensible.

It is better to have a set of types that have the endianess specified so that we can use sparse. Compile time checking is always a good plan where it is possible.

Okay, I'll add back the bitwise annotations through typedefs to stdint.h types in a new header but I don't want to name it linux/types.h to avoid picking up the wrong one, so I'll just change that #include in gfs2_ondisk.h.

Andy

Reply via email to