On 10/09/2018 04:39 PM, Bjoern Walk wrote:
Michal Privoznik <mprivozn(a)redhat.com> [2018-10-09, 03:45PM
+0200]:
> On 10/08/2018 08:41 PM, Marc Hartmayer wrote:
>> Use the correct type in order to fix the following error on s390x:
>>
>> In function 'virFileIsSharedFSType':
>> ../../src/util/virfile.c:3578:38: error: cast increases required alignment of
target type [-Werror=cast-align]
>> virFileIsSharedFixFUSE(path, (long *) &sb.f_type);
>>
>> Signed-off-by: Marc Hartmayer <mhartmay(a)linux.ibm.com>
>> ---
>> src/util/virfile.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/util/virfile.c b/src/util/virfile.c
>> index 2a7e87102a25..832d832696d5 100644
>> --- a/src/util/virfile.c
>> +++ b/src/util/virfile.c
>> @@ -3466,7 +3466,7 @@ int virFilePrintf(FILE *fp, const char *msg, ...)
>>
>> static int
>> virFileIsSharedFixFUSE(const char *path,
>> - long *f_type)
>> + unsigned int *f_type)
>> {
>> char *dirpath = NULL;
>> const char **mounts = NULL;
>> @@ -3575,7 +3575,7 @@ virFileIsSharedFSType(const char *path,
>>
>> if (sb.f_type == FUSE_SUPER_MAGIC) {
>> VIR_DEBUG("Found FUSE mount for path=%s. Trying to fix it",
path);
>> - virFileIsSharedFixFUSE(path, (long *) &sb.f_type);
>> + virFileIsSharedFixFUSE(path, &sb.f_type);
>
> This won't fly on x86_64 where f_type is long. I think we can use
> __fsword_t directly.
>
>> }
>>
>> VIR_DEBUG("Check if path %s with FS magic %lld is shared",
>>
>
> Does that work for you?
Hmm, __fsword_t is still a long int but the f_type member is defined as
unsigned int in the userspace header.
What header file are you looking at? From /usr/include/bits/statfs.h:
struct statfs
{
__fsword_t f_type;
__fsword_t f_bsize;
/* ..... */
__fsid_t f_fsid;
__fsword_t f_namelen;
__fsword_t f_frsize;
__fsword_t f_flags;
__fsword_t f_spare[4];
};
Also, I am against exposing any
internal data types.
It's not internal if it is exposed in a public header file.
virFileIsSharedFixFUSE could just return the value, the return value
right now is not checked anyways.
Sure, but since you claim the f_type member is an unsigned type, then we
would hit the sign warning anyway.
Also, not sure. If virFileIsSharedFixFUSE() is unable to tell the
filesystem it should not touch the f_type at all.
Michal