On Thu, Jul 06, 2017 at 06:58:37PM +0200, Christoph Hellwig wrote: > On Thu, Jul 06, 2017 at 04:51:13PM +0100, Al Viro wrote: > > On Thu, Jul 06, 2017 at 04:46:02PM +0100, Al Viro wrote: > > > > > That - on #work.read_write, as in vfs.git at the moment... > > > > ... and for COMPAT_SYSCALL you need > > #define __SC_DELOUSE(t,v) ((__force t)(unsigned long)(v)) > > in linux/compat.h > > I'm still getting warnings with both these force casts. This is > the current stack: That + Linus' tree as of the end of yesterday => CHECK fs/read_write.c fs/read_write.c:38:29: warning: incorrect type in return expression (different base types) fs/read_write.c:38:29: expected int fs/read_write.c:38:29: got restricted fmode_t fs/read_write.c:38:29: warning: incorrect type in return expression (different base types) fs/read_write.c:38:29: expected int fs/read_write.c:38:29: got restricted fmode_t fs/read_write.c:38:29: warning: incorrect type in return expression (different base types) fs/read_write.c:38:29: expected int fs/read_write.c:38:29: got restricted fmode_t fs/read_write.c:38:29: warning: incorrect type in return expression (different base types) fs/read_write.c:38:29: expected int fs/read_write.c:38:29: got restricted fmode_t All of which are from unsigned_offsets() and that's one case where bool would be better than int. Switching the return type to bool yields CHECK fs/read_write.c CC fs/read_write.o - no warnings at all. Which sparse version are you using and what's your .config?