Fix cifs_uniqueid_to_ino_t() function for s390x
authorYadan Fan <ydfan@novell.com>
Mon, 29 Feb 2016 06:44:57 +0000 (14:44 +0800)
committerSteve French <smfrench@gmail.com>
Mon, 29 Feb 2016 06:46:55 +0000 (00:46 -0600)
commit1ee9f4bd1a97026a7b2d7ae9f1f74b45680d0003
treed7fcdad2aa1f756b1f6da94076e939331cb7b059
parent6cc3b24235929b54acd5ecc987ef11a425bd209e
Fix cifs_uniqueid_to_ino_t() function for s390x

This issue is caused by commit 02323db17e3a7 ("cifs: fix
cifs_uniqueid_to_ino_t not to ever return 0"), when BITS_PER_LONG
is 64 on s390x, the corresponding cifs_uniqueid_to_ino_t()
function will cast 64-bit fileid to 32-bit by using (ino_t)fileid,
because ino_t (typdefed __kernel_ino_t) is int type.

It's defined in arch/s390/include/uapi/asm/posix_types.h

    #ifndef __s390x__

    typedef unsigned long   __kernel_ino_t;
    ...
    #else /* __s390x__ */

    typedef unsigned int    __kernel_ino_t;

So the #ifdef condition is wrong for s390x, we can just still use
one cifs_uniqueid_to_ino_t() function with comparing sizeof(ino_t)
and sizeof(u64) to choose the correct execution accordingly.

Signed-off-by: Yadan Fan <ydfan@suse.com>
CC: stable <stable@vger.kernel.org>
Signed-off-by: Steve French <smfrench@gmail.com>
fs/cifs/cifsfs.h