• David Sterba's avatar
    btrfs: calculate number of eb pages properly in csum_tree_block · 7280305e
    David Sterba authored
    Building with -Warray-bounds on systems with 64K pages there's a
    warning:
    
      fs/btrfs/disk-io.c: In function ‘csum_tree_block’:
      fs/btrfs/disk-io.c:226:34: warning: array subscript 1 is above array bounds of ‘struct page *[1]’ [-Warray-bounds]
        226 |   kaddr = page_address(buf->pages[i]);
            |                        ~~~~~~~~~~^~~
      ./include/linux/mm.h:1630:48: note: in definition of macro ‘page_address’
       1630 | #define page_address(page) lowmem_page_address(page)
            |                                                ^~~~
      In file included from fs/btrfs/ctree.h:32,
                       from fs/btrfs/disk-io.c:23:
      fs/btrfs/extent_io.h:98:15: note: while referencing ‘pages’
         98 |  struct page *pages[1];
            |               ^~~~~
    
    The compiler has no way to know that in that case the nodesize is exactly
    PAGE_SIZE, so the resulting number of pages will be correct (1).
    
    Let's use num_extent_pages that makes the case nodesize == PAGE_SIZE
    explicitly 1.
    Reported-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
    Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    7280305e
disk-io.c 139 KB