[libvirt] [RFC] virfile: fix cast-align error
Michal Privoznik
mprivozn at redhat.com
Tue Oct 9 14:52:29 UTC 2018
On 10/09/2018 04:39 PM, Bjoern Walk wrote:
> Michal Privoznik <mprivozn at 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 at 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
More information about the libvir-list
mailing list