Thread (4 messages) 4 messages, 3 authors, 2014-05-25

Re: fs/hfsplus/xattr.c: comparison of distinct pointer types lacks a cast

From: Christian Kujau <hidden>
Date: 2014-05-25 19:07:48
Also in: linux-fsdevel
Subsystem: filesystems (vfs and infrastructure), hfsplus filesystem, the rest · Maintainers: Alexander Viro, Christian Brauner, Viacheslav Dubeyko, John Paul Adrian Glaubitz, Yangtao Li, Linus Torvalds

On Sun, 25 May 2014 at 10:48, Geert Uytterhoeven wrote:
"tmp" is "loff_t" which is "__kernel_loff_t", which is "long long", i.e. signed,
while include/asm-generic/div64.h compares its type with "uint64_t".
Thanks for the explanation!
As inode sizes are positive, it should be safe to change the type of "tmp"
to "u64". Does that make the warning go away?
Yes, this helped! Compile-tested only:

 Signed-off-by: Christian Kujau [off-list ref]
      Fixed-by: Geert Uytterhoeven [off-list ref]

Commit a99b7069aab8fc3fb4f26d15795dc280b52e38b1 introduced do_div() to 
xattr.c and the warning below too.

As Geert remarked: "tmp" is "loff_t" which is "__kernel_loff_t", which
is "long long", i.e. signed, while include/asm-generic/div64.h compares
its type with "uint64_t". As inode sizes are positive, it should be safe 
to change the type of "tmp" to "u64". 

==============================
  CC [M]  fs/hfsplus/xattr_user.o
  CC [M]  fs/hfsplus/xattr_security.o
  CC [M]  fs/hfsplus/xattr.o
  CC [M]  fs/hfsplus/xattr_trusted.o
In file included from 
arch/powerpc/include/asm/div64.h:1:0,
                 from include/linux/kernel.h:124,
                 from include/asm-generic/bug.h:13,
                 from arch/powerpc/include/asm/bug.h:127,
                 from include/linux/bug.h:4,
                 from include/linux/thread_info.h:11,
                 from include/asm-generic/preempt.h:4,
                 from arch/powerpc/include/generated/asm/preempt.h:1,
                 from include/linux/preempt.h:18,
                 from include/linux/spinlock.h:50,
                 from include/linux/wait.h:8,
                 from include/linux/fs.h:6,
                 from fs/hfsplus/hfsplus_fs.h:19,
                 from fs/hfsplus/xattr.c:9:
fs/hfsplus/xattr.c: In function 
'hfsplus_init_header_node':
include/asm-generic/div64.h:43:28: warning: 
comparison of distinct pointer types lacks a cast [enabled by default]
  (void)(((typeof((n)) *)0) == ((uint64_t *)0)); \
                            ^
fs/hfsplus/xattr.c:86:2: note: in expansion of 
macro 'do_div'
  do_div(tmp, node_size);
  ^
  LD [M]  fs/hfsplus/hfsplus.o
==============================

diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c
index 4e27edc..cd9ed4c 100644
--- a/fs/hfsplus/xattr.c
+++ b/fs/hfsplus/xattr.c
@@ -66,7 +66,7 @@ static void hfsplus_init_header_node(struct inode *attr_file,
 	char *bmp;
 	u32 used_nodes;
 	u32 used_bmp_bytes;
-	loff_t tmp;
+	u64 tmp;
 
 	hfs_dbg(ATTR_MOD, "init_hdr_attr_file: clump %u, node_size %u\n",
 				clump_size, node_size);


Thanks,
Christian.
-- 
BOFH excuse #388:

Bad user karma.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help