Re: Commit fcd8843c40 breaks old compilers

2017-11-20 Thread Boris Ostrovsky
On 11/20/2017 07:52 AM, Arnd Bergmann wrote:
> On Sat, Nov 18, 2017 at 7:07 PM, Boris Ostrovsky
>  wrote:
>>
>> On 11/18/2017 12:39 PM, Trond Myklebust wrote:
>>> On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:
 A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
 but
 I don't think the same approach can work here.
>>>
>>>
>>> I don't have any setups with gcc 4.4.4. What is it expecting here? Is
>>> it expecting an extra set of braces due to the anonymous "struct"?
> I can reproduce it with gcc-4.5 but not 4.6. We've had similar problems
> in the past in other anonymous unions.

IIRC anonymous struct initializers were added in 4.6.1.

>
>> I don't know if you want to change public header file just to get around
>> this problem.
> I think flipping the two members around should be safe here. It's
> not exported to user space, and all other users of that structure
> don't care about the order inside of the union.

Trond already submitted a fix ---
<20171118185011.4729-1-trond.mykleb...@primarydata.com> (sorry, I can't
provide a direct link right now)

-boris





Re: Commit fcd8843c40 breaks old compilers

2017-11-20 Thread Boris Ostrovsky
On 11/20/2017 07:52 AM, Arnd Bergmann wrote:
> On Sat, Nov 18, 2017 at 7:07 PM, Boris Ostrovsky
>  wrote:
>>
>> On 11/18/2017 12:39 PM, Trond Myklebust wrote:
>>> On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:
 A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
 but
 I don't think the same approach can work here.
>>>
>>>
>>> I don't have any setups with gcc 4.4.4. What is it expecting here? Is
>>> it expecting an extra set of braces due to the anonymous "struct"?
> I can reproduce it with gcc-4.5 but not 4.6. We've had similar problems
> in the past in other anonymous unions.

IIRC anonymous struct initializers were added in 4.6.1.

>
>> I don't know if you want to change public header file just to get around
>> this problem.
> I think flipping the two members around should be safe here. It's
> not exported to user space, and all other users of that structure
> don't care about the order inside of the union.

Trond already submitted a fix ---
<20171118185011.4729-1-trond.mykleb...@primarydata.com> (sorry, I can't
provide a direct link right now)

-boris





Re: Commit fcd8843c40 breaks old compilers

2017-11-20 Thread Arnd Bergmann
On Sat, Nov 18, 2017 at 7:07 PM, Boris Ostrovsky
 wrote:
>
>
> On 11/18/2017 12:39 PM, Trond Myklebust wrote:
>>
>> On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:
>>>

>>> A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
>>> but
>>> I don't think the same approach can work here.
>>
>>
>>
>> I don't have any setups with gcc 4.4.4. What is it expecting here? Is
>> it expecting an extra set of braces due to the anonymous "struct"?

I can reproduce it with gcc-4.5 but not 4.6. We've had similar problems
in the past in other anonymous unions.

> I don't know if you want to change public header file just to get around
> this problem.

I think flipping the two members around should be safe here. It's
not exported to user space, and all other users of that structure
don't care about the order inside of the union.

   Arnd


Re: Commit fcd8843c40 breaks old compilers

2017-11-20 Thread Arnd Bergmann
On Sat, Nov 18, 2017 at 7:07 PM, Boris Ostrovsky
 wrote:
>
>
> On 11/18/2017 12:39 PM, Trond Myklebust wrote:
>>
>> On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:
>>>

>>> A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
>>> but
>>> I don't think the same approach can work here.
>>
>>
>>
>> I don't have any setups with gcc 4.4.4. What is it expecting here? Is
>> it expecting an extra set of braces due to the anonymous "struct"?

I can reproduce it with gcc-4.5 but not 4.6. We've had similar problems
in the past in other anonymous unions.

> I don't know if you want to change public header file just to get around
> this problem.

I think flipping the two members around should be safe here. It's
not exported to user space, and all other users of that structure
don't care about the order inside of the union.

   Arnd


Re: Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Boris Ostrovsky



On 11/18/2017 01:12 PM, Trond Myklebust wrote:



Sigh OK, how about something like the following then:

{ .data = { 0xff, 0xff, 0xff, 0xff, 0 }, }




Yes, this does build.


diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 54fd56d..daa6085 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -71,8 +71,7 @@
 };
 const nfs4_stateid invalid_stateid = {
{
-   .seqid = cpu_to_be32(0xU),
-   .other = { 0 },
+   .data = { 0xff, 0xff, 0xff, 0xff, 0 },
},
.type = NFS4_INVALID_STATEID_TYPE,
 };


-boris


Re: Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Boris Ostrovsky



On 11/18/2017 01:12 PM, Trond Myklebust wrote:



Sigh OK, how about something like the following then:

{ .data = { 0xff, 0xff, 0xff, 0xff, 0 }, }




Yes, this does build.


diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 54fd56d..daa6085 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -71,8 +71,7 @@
 };
 const nfs4_stateid invalid_stateid = {
{
-   .seqid = cpu_to_be32(0xU),
-   .other = { 0 },
+   .data = { 0xff, 0xff, 0xff, 0xff, 0 },
},
.type = NFS4_INVALID_STATEID_TYPE,
 };


-boris


Re: Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Trond Myklebust
On Sat, 2017-11-18 at 13:07 -0500, Boris Ostrovsky wrote:
> 
> On 11/18/2017 12:39 PM, Trond Myklebust wrote:
> > On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:
> > > Commit fcd8843c406b46433857ae45e5e9d84b01a7d20b breaks on older
> > > compilers which cannot process initializers for anonymous
> > > structures:
> > > 
> > > +const nfs4_stateid invalid_stateid = {
> > > +   {
> > > +   .seqid = cpu_to_be32(0xU),
> > > +   .other = { 0 },
> > > +   },
> > > +   .type = NFS4_INVALID_STATEID_TYPE,
> > > +};
> > > 
> > > 
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:74: error: unknown
> > > field
> > > ‘seqid’ specified in initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: missing
> > > braces
> > > around initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: (near
> > > initialization for ‘invalid_stateid..data’)
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: overflow
> > > in
> > > implicit constant conversion
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: unknown
> > > field
> > > ‘other’ specified in initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: extra brace
> > > group
> > > at end of initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: (near
> > > initialization for ‘invalid_stateid.’)
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: excess
> > > elements
> > > in union initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: (near
> > > initialization for ‘invalid_stateid.’)
> > > make[4]: *** [fs/nfs/nfs4state.o] Error 1
> > > make[3]: *** [fs/nfs] Error 2
> > > 
> > > 
> > > FC-64  gcc --version
> > > gcc (GCC) 4.4.4 20100503 (Red Hat 4.4.4-2)
> > > 
> > > 
> > > A similar bug was fixed by
> > > e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
> > > but
> > > I don't think the same approach can work here.
> > 
> > 
> > I don't have any setups with gcc 4.4.4. What is it expecting here?
> > Is
> > it expecting an extra set of braces due to the anonymous "struct"?
> > 
> 
> No, that won't work (at least I couldn't get it to work) because the 
> solution from e0714ec4f9e assumes that the anonymous struct is the
> first 
> one in the enveloping struct.
> 
> It worked only if I (this is a small C program with equivalent
> structs):
> 
> struct nfs4_stateid_struct {
>  union {
>  //char data[4];
>  struct {
>  unsigned seqid;
>  char other[6];
>  } __attribute__ ((packed));
>   char data[4];
>  };
> and then
> 
> const nfs4_stateid invalid_stateid = {
>  {
>{.seqid = 0xU,
>.other = { 0 } },
>  },
>  .type = NFS4_INVALID_STATEID_TYPE,
> };
> 
> If I keep data[4] where it is now I get compiler error
> 
> an.c:35:20: error: field name not in record or union initializer
> {.seqid = 0xU,
>  ^
> an.c:35:20: note: (near initialization for 
> 'invalid_stateid..data')
> an.c:35:29: warning: overflow in implicit constant conversion [-
> Woverflow]
> {.seqid = 0xU,
>   ^~~
> an.c:36:19: error: field name not in record or union initializer
> .other = { 0 } },
> ^
> an.c:36:19: note: (near initialization for 
> 'invalid_stateid..data')
> an.c:36:19: warning: braces around scalar initializer
> an.c:36:19: note: (near initialization for 
> 'invalid_stateid..data[1]')
> 
> I don't know if you want to change public header file just to get
> around 
> this problem.

Sigh OK, how about something like the following then:

{ .data = { 0xff, 0xff, 0xff, 0xff, 0 }, }

-- 
Trond Myklebust
Linux NFS client maintainer, PrimaryData
trond.mykleb...@primarydata.com


Re: Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Trond Myklebust
On Sat, 2017-11-18 at 13:07 -0500, Boris Ostrovsky wrote:
> 
> On 11/18/2017 12:39 PM, Trond Myklebust wrote:
> > On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:
> > > Commit fcd8843c406b46433857ae45e5e9d84b01a7d20b breaks on older
> > > compilers which cannot process initializers for anonymous
> > > structures:
> > > 
> > > +const nfs4_stateid invalid_stateid = {
> > > +   {
> > > +   .seqid = cpu_to_be32(0xU),
> > > +   .other = { 0 },
> > > +   },
> > > +   .type = NFS4_INVALID_STATEID_TYPE,
> > > +};
> > > 
> > > 
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:74: error: unknown
> > > field
> > > ‘seqid’ specified in initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: missing
> > > braces
> > > around initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: (near
> > > initialization for ‘invalid_stateid..data’)
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: overflow
> > > in
> > > implicit constant conversion
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: unknown
> > > field
> > > ‘other’ specified in initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: extra brace
> > > group
> > > at end of initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: (near
> > > initialization for ‘invalid_stateid.’)
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: excess
> > > elements
> > > in union initializer
> > > /home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: (near
> > > initialization for ‘invalid_stateid.’)
> > > make[4]: *** [fs/nfs/nfs4state.o] Error 1
> > > make[3]: *** [fs/nfs] Error 2
> > > 
> > > 
> > > FC-64  gcc --version
> > > gcc (GCC) 4.4.4 20100503 (Red Hat 4.4.4-2)
> > > 
> > > 
> > > A similar bug was fixed by
> > > e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
> > > but
> > > I don't think the same approach can work here.
> > 
> > 
> > I don't have any setups with gcc 4.4.4. What is it expecting here?
> > Is
> > it expecting an extra set of braces due to the anonymous "struct"?
> > 
> 
> No, that won't work (at least I couldn't get it to work) because the 
> solution from e0714ec4f9e assumes that the anonymous struct is the
> first 
> one in the enveloping struct.
> 
> It worked only if I (this is a small C program with equivalent
> structs):
> 
> struct nfs4_stateid_struct {
>  union {
>  //char data[4];
>  struct {
>  unsigned seqid;
>  char other[6];
>  } __attribute__ ((packed));
>   char data[4];
>  };
> and then
> 
> const nfs4_stateid invalid_stateid = {
>  {
>{.seqid = 0xU,
>.other = { 0 } },
>  },
>  .type = NFS4_INVALID_STATEID_TYPE,
> };
> 
> If I keep data[4] where it is now I get compiler error
> 
> an.c:35:20: error: field name not in record or union initializer
> {.seqid = 0xU,
>  ^
> an.c:35:20: note: (near initialization for 
> 'invalid_stateid..data')
> an.c:35:29: warning: overflow in implicit constant conversion [-
> Woverflow]
> {.seqid = 0xU,
>   ^~~
> an.c:36:19: error: field name not in record or union initializer
> .other = { 0 } },
> ^
> an.c:36:19: note: (near initialization for 
> 'invalid_stateid..data')
> an.c:36:19: warning: braces around scalar initializer
> an.c:36:19: note: (near initialization for 
> 'invalid_stateid..data[1]')
> 
> I don't know if you want to change public header file just to get
> around 
> this problem.

Sigh OK, how about something like the following then:

{ .data = { 0xff, 0xff, 0xff, 0xff, 0 }, }

-- 
Trond Myklebust
Linux NFS client maintainer, PrimaryData
trond.mykleb...@primarydata.com


Re: Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Boris Ostrovsky



On 11/18/2017 12:39 PM, Trond Myklebust wrote:

On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:

Commit fcd8843c406b46433857ae45e5e9d84b01a7d20b breaks on older
compilers which cannot process initializers for anonymous structures:

+const nfs4_stateid invalid_stateid = {
+   {
+   .seqid = cpu_to_be32(0xU),
+   .other = { 0 },
+   },
+   .type = NFS4_INVALID_STATEID_TYPE,
+};


/home/build/linux-linus/fs/nfs/nfs4state.c:74: error: unknown field
‘seqid’ specified in initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: missing
braces
around initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: (near
initialization for ‘invalid_stateid..data’)
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: overflow in
implicit constant conversion
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: unknown field
‘other’ specified in initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: extra brace
group
at end of initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: (near
initialization for ‘invalid_stateid.’)
/home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: excess
elements
in union initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: (near
initialization for ‘invalid_stateid.’)
make[4]: *** [fs/nfs/nfs4state.o] Error 1
make[3]: *** [fs/nfs] Error 2


FC-64  gcc --version
gcc (GCC) 4.4.4 20100503 (Red Hat 4.4.4-2)


A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
but
I don't think the same approach can work here.



I don't have any setups with gcc 4.4.4. What is it expecting here? Is
it expecting an extra set of braces due to the anonymous "struct"?



No, that won't work (at least I couldn't get it to work) because the 
solution from e0714ec4f9e assumes that the anonymous struct is the first 
one in the enveloping struct.


It worked only if I (this is a small C program with equivalent structs):

struct nfs4_stateid_struct {
union {
//char data[4];
struct {
unsigned seqid;
char other[6];
} __attribute__ ((packed));
char data[4];
};
and then

const nfs4_stateid invalid_stateid = {
{
  {.seqid = 0xU,
  .other = { 0 } },
},
.type = NFS4_INVALID_STATEID_TYPE,
};

If I keep data[4] where it is now I get compiler error

an.c:35:20: error: field name not in record or union initializer
   {.seqid = 0xU,
^
an.c:35:20: note: (near initialization for 
'invalid_stateid..data')

an.c:35:29: warning: overflow in implicit constant conversion [-Woverflow]
   {.seqid = 0xU,
 ^~~
an.c:36:19: error: field name not in record or union initializer
   .other = { 0 } },
   ^
an.c:36:19: note: (near initialization for 
'invalid_stateid..data')

an.c:36:19: warning: braces around scalar initializer
an.c:36:19: note: (near initialization for 
'invalid_stateid..data[1]')


I don't know if you want to change public header file just to get around 
this problem.



-boris


Re: Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Boris Ostrovsky



On 11/18/2017 12:39 PM, Trond Myklebust wrote:

On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:

Commit fcd8843c406b46433857ae45e5e9d84b01a7d20b breaks on older
compilers which cannot process initializers for anonymous structures:

+const nfs4_stateid invalid_stateid = {
+   {
+   .seqid = cpu_to_be32(0xU),
+   .other = { 0 },
+   },
+   .type = NFS4_INVALID_STATEID_TYPE,
+};


/home/build/linux-linus/fs/nfs/nfs4state.c:74: error: unknown field
‘seqid’ specified in initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: missing
braces
around initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: (near
initialization for ‘invalid_stateid..data’)
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: overflow in
implicit constant conversion
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: unknown field
‘other’ specified in initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: extra brace
group
at end of initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: (near
initialization for ‘invalid_stateid.’)
/home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: excess
elements
in union initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: (near
initialization for ‘invalid_stateid.’)
make[4]: *** [fs/nfs/nfs4state.o] Error 1
make[3]: *** [fs/nfs] Error 2


FC-64  gcc --version
gcc (GCC) 4.4.4 20100503 (Red Hat 4.4.4-2)


A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
but
I don't think the same approach can work here.



I don't have any setups with gcc 4.4.4. What is it expecting here? Is
it expecting an extra set of braces due to the anonymous "struct"?



No, that won't work (at least I couldn't get it to work) because the 
solution from e0714ec4f9e assumes that the anonymous struct is the first 
one in the enveloping struct.


It worked only if I (this is a small C program with equivalent structs):

struct nfs4_stateid_struct {
union {
//char data[4];
struct {
unsigned seqid;
char other[6];
} __attribute__ ((packed));
char data[4];
};
and then

const nfs4_stateid invalid_stateid = {
{
  {.seqid = 0xU,
  .other = { 0 } },
},
.type = NFS4_INVALID_STATEID_TYPE,
};

If I keep data[4] where it is now I get compiler error

an.c:35:20: error: field name not in record or union initializer
   {.seqid = 0xU,
^
an.c:35:20: note: (near initialization for 
'invalid_stateid..data')

an.c:35:29: warning: overflow in implicit constant conversion [-Woverflow]
   {.seqid = 0xU,
 ^~~
an.c:36:19: error: field name not in record or union initializer
   .other = { 0 } },
   ^
an.c:36:19: note: (near initialization for 
'invalid_stateid..data')

an.c:36:19: warning: braces around scalar initializer
an.c:36:19: note: (near initialization for 
'invalid_stateid..data[1]')


I don't know if you want to change public header file just to get around 
this problem.



-boris


Re: Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Trond Myklebust
On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:
> Commit fcd8843c406b46433857ae45e5e9d84b01a7d20b breaks on older
> compilers which cannot process initializers for anonymous structures:
> 
> +const nfs4_stateid invalid_stateid = {
> +   {
> +   .seqid = cpu_to_be32(0xU),
> +   .other = { 0 },
> +   },
> +   .type = NFS4_INVALID_STATEID_TYPE,
> +};
> 
> 
> /home/build/linux-linus/fs/nfs/nfs4state.c:74: error: unknown field
> ‘seqid’ specified in initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: missing
> braces
> around initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: (near
> initialization for ‘invalid_stateid..data’)
> /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: overflow in
> implicit constant conversion
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: unknown field
> ‘other’ specified in initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: extra brace
> group
> at end of initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: (near
> initialization for ‘invalid_stateid.’)
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: excess
> elements
> in union initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: (near
> initialization for ‘invalid_stateid.’)
> make[4]: *** [fs/nfs/nfs4state.o] Error 1
> make[3]: *** [fs/nfs] Error 2
> 
> 
> FC-64  gcc --version
> gcc (GCC) 4.4.4 20100503 (Red Hat 4.4.4-2)
> 
> 
> A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
> but
> I don't think the same approach can work here.


I don't have any setups with gcc 4.4.4. What is it expecting here? Is
it expecting an extra set of braces due to the anonymous "struct"?

-- 
Trond Myklebust
Linux NFS client maintainer, PrimaryData
trond.mykleb...@primarydata.com


Re: Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Trond Myklebust
On Sat, 2017-11-18 at 12:19 -0500, Boris Ostrovsky wrote:
> Commit fcd8843c406b46433857ae45e5e9d84b01a7d20b breaks on older
> compilers which cannot process initializers for anonymous structures:
> 
> +const nfs4_stateid invalid_stateid = {
> +   {
> +   .seqid = cpu_to_be32(0xU),
> +   .other = { 0 },
> +   },
> +   .type = NFS4_INVALID_STATEID_TYPE,
> +};
> 
> 
> /home/build/linux-linus/fs/nfs/nfs4state.c:74: error: unknown field
> ‘seqid’ specified in initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: missing
> braces
> around initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: (near
> initialization for ‘invalid_stateid..data’)
> /home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: overflow in
> implicit constant conversion
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: unknown field
> ‘other’ specified in initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: extra brace
> group
> at end of initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: error: (near
> initialization for ‘invalid_stateid.’)
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: excess
> elements
> in union initializer
> /home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: (near
> initialization for ‘invalid_stateid.’)
> make[4]: *** [fs/nfs/nfs4state.o] Error 1
> make[3]: *** [fs/nfs] Error 2
> 
> 
> FC-64  gcc --version
> gcc (GCC) 4.4.4 20100503 (Red Hat 4.4.4-2)
> 
> 
> A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91
> but
> I don't think the same approach can work here.


I don't have any setups with gcc 4.4.4. What is it expecting here? Is
it expecting an extra set of braces due to the anonymous "struct"?

-- 
Trond Myklebust
Linux NFS client maintainer, PrimaryData
trond.mykleb...@primarydata.com


Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Boris Ostrovsky
Commit fcd8843c406b46433857ae45e5e9d84b01a7d20b breaks on older
compilers which cannot process initializers for anonymous structures:

+const nfs4_stateid invalid_stateid = {
+   {
+   .seqid = cpu_to_be32(0xU),
+   .other = { 0 },
+   },
+   .type = NFS4_INVALID_STATEID_TYPE,
+};


/home/build/linux-linus/fs/nfs/nfs4state.c:74: error: unknown field
‘seqid’ specified in initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: missing braces
around initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: (near
initialization for ‘invalid_stateid..data’)
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: overflow in
implicit constant conversion
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: unknown field
‘other’ specified in initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: extra brace group
at end of initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: (near
initialization for ‘invalid_stateid.’)
/home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: excess elements
in union initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: (near
initialization for ‘invalid_stateid.’)
make[4]: *** [fs/nfs/nfs4state.o] Error 1
make[3]: *** [fs/nfs] Error 2


FC-64  gcc --version
gcc (GCC) 4.4.4 20100503 (Red Hat 4.4.4-2)


A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91 but
I don't think the same approach can work here.


-boris


Commit fcd8843c40 breaks old compilers

2017-11-18 Thread Boris Ostrovsky
Commit fcd8843c406b46433857ae45e5e9d84b01a7d20b breaks on older
compilers which cannot process initializers for anonymous structures:

+const nfs4_stateid invalid_stateid = {
+   {
+   .seqid = cpu_to_be32(0xU),
+   .other = { 0 },
+   },
+   .type = NFS4_INVALID_STATEID_TYPE,
+};


/home/build/linux-linus/fs/nfs/nfs4state.c:74: error: unknown field
‘seqid’ specified in initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: missing braces
around initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: (near
initialization for ‘invalid_stateid..data’)
/home/build/linux-linus/fs/nfs/nfs4state.c:74: warning: overflow in
implicit constant conversion
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: unknown field
‘other’ specified in initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: extra brace group
at end of initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: error: (near
initialization for ‘invalid_stateid.’)
/home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: excess elements
in union initializer
/home/build/linux-linus/fs/nfs/nfs4state.c:75: warning: (near
initialization for ‘invalid_stateid.’)
make[4]: *** [fs/nfs/nfs4state.o] Error 1
make[3]: *** [fs/nfs] Error 2


FC-64  gcc --version
gcc (GCC) 4.4.4 20100503 (Red Hat 4.4.4-2)


A similar bug was fixed by e0714ec4f9efe7b86828b0dcc077fd8f5d8e5e91 but
I don't think the same approach can work here.


-boris