• David Howells's avatar
    cachefiles: Fix corruption of the return value in cachefiles_read_or_alloc_pages() · c5f9d9db
    David Howells authored
    The patch which changed cachefiles from calling ->bmap() to using the
    bmap() wrapper overwrote the running return value with the result of
    calling bmap().  This causes an assertion failure elsewhere in the code.
    
    Fix this by using ret2 rather than ret to hold the return value.
    
    The oops looks like:
    
    	kernel BUG at fs/nfs/fscache.c:468!
    	...
    	RIP: 0010:__nfs_readpages_from_fscache+0x18b/0x190 [nfs]
    	...
    	Call Trace:
    	 nfs_readpages+0xbf/0x1c0 [nfs]
    	 ? __alloc_pages_nodemask+0x16c/0x320
    	 read_pages+0x67/0x1a0
    	 __do_page_cache_readahead+0x1cf/0x1f0
    	 ondemand_readahead+0x172/0x2b0
    	 page_cache_async_readahead+0xaa/0xe0
    	 generic_file_buffered_read+0x852/0xd50
    	 ? mem_cgroup_commit_charge+0x6e/0x140
    	 ? nfs4_have_delegation+0x19/0x30 [nfsv4]
    	 generic_file_read_iter+0x100/0x140
    	 ? nfs_revalidate_mapping+0x176/0x2b0 [nfs]
    	 nfs_file_read+0x6d/0xc0 [nfs]
    	 new_sync_read+0x11a/0x1c0
    	 __vfs_read+0x29/0x40
    	 vfs_read+0x8e/0x140
    	 ksys_read+0x61/0xd0
    	 __x64_sys_read+0x1a/0x20
    	 do_syscall_64+0x60/0x1e0
    	 entry_SYSCALL_64_after_hwframe+0x44/0xa9
    	RIP: 0033:0x7f5d148267e0
    
    Fixes: 10d83e11 ("cachefiles: drop direct usage of ->bmap method.")
    Reported-by: default avatarDavid Wysochanski <dwysocha@redhat.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Tested-by: default avatarDavid Wysochanski <dwysocha@redhat.com>
    cc: Carlos Maiolino <cmaiolino@redhat.com>
    c5f9d9db
rdwr.c 24.1 KB