cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH] libgfs2: Import gfs2_ondisk.h
Date: Tue, 9 Apr 2019 14:03:55 +0100	[thread overview]
Message-ID: <bffe7a10-c0ce-dfc7-96c5-09a716033263@redhat.com> (raw)
In-Reply-To: <559698d2-eb0c-7d50-be6d-0167e0e704b7@redhat.com>

Hi,

On 09/04/2019 13:48, Andrew Price wrote:
>
>
> 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.
>
Well in general we don't want to convert lots of fields in what is 
basically a copy. The inode, when it is read in is an exception to that 
mainly because we have to in order to make sure that the vfs level data 
is all up to date. Keeping the structs as containers is useful, so yes 
we want to retain that. In many cases though we only need a few fields 
from what can be quite large data structures, so in those cases we 
should read/update the fields that we care about for that particular 
operation, rather than converting the whole data structure each time. We 
got a fair speed up when we made that change in the kernel.

So generally I'd like to discourage the blanket conversion functions, 
though it is likely we'll need to retain a few of them, in favour of 
converting just the required fields at the point of use. This should be 
safe to do given that we have the ability to do compile time type 
checking - and lets try and include that in the tests that are always 
run before check in, to make sure that we don't land up with any 
mistakes. That would be a good addition to the tests I think,

Steve.




  reply	other threads:[~2019-04-09 13:03 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-09  9:41 [Cluster-devel] [PATCH] libgfs2: Import gfs2_ondisk.h Andrew Price
2019-04-09 12:03 ` Christoph Hellwig
2019-04-09 12:18   ` Andrew Price
2019-04-09 12:21     ` Steven Whitehouse
2019-04-09 12:35       ` Christoph Hellwig
2019-11-08  9:50         ` Andrew Price
2019-04-09 12:48       ` Andrew Price
2019-04-09 13:03         ` Steven Whitehouse [this message]
2019-04-09 13:14           ` Andrew Price

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bffe7a10-c0ce-dfc7-96c5-09a716033263@redhat.com \
    --to=swhiteho@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).