Message ID | 20240510102906.51844-5-hare@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | enable bs > ps for block devices | expand |
On Fri, May 10, 2024 at 12:29:05PM +0200, hare@kernel.org wrote: > From: Hannes Reinecke <hare@suse.de> > > Call mapping_set_folio_min_order() when modifying the logical block > size to ensure folios are allocated with the correct size. This makes me nervous. It lets the pagecache allocate folios larger than min_order (all the way up to PMD_ORDER). Filesystems may not cope well with seeing tail pages. I'd _like_ to be able to do this. But I think for now we need to call mapping_set_folio_order_range(mapping, order, order);
Hi, kernel test robot noticed the following build errors: [auto build test ERROR on axboe-block/for-next] [also build test ERROR on akpm-mm/mm-everything linus/master v6.9-rc7] [cannot apply to next-20240510] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/hare-kernel-org/fs-mpage-use-blocks_per_folio-instead-of-blocks_per_page/20240510-183146 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next patch link: https://lore.kernel.org/r/20240510102906.51844-5-hare%40kernel.org patch subject: [PATCH 4/5] block/bdev: enable large folio support for large logical block sizes config: arc-allnoconfig (https://download.01.org/0day-ci/archive/20240511/202405111234.wXN5f0fB-lkp@intel.com/config) compiler: arc-elf-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240511/202405111234.wXN5f0fB-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202405111234.wXN5f0fB-lkp@intel.com/ All errors (new ones prefixed by >>): block/bdev.c: In function 'set_init_blocksize': >> block/bdev.c:145:9: error: implicit declaration of function 'mapping_set_folio_min_order' [-Werror=implicit-function-declaration] 145 | mapping_set_folio_min_order(bdev->bd_inode->i_mapping, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/mapping_set_folio_min_order +145 block/bdev.c 133 134 static void set_init_blocksize(struct block_device *bdev) 135 { 136 unsigned int bsize = bdev_logical_block_size(bdev); 137 loff_t size = i_size_read(bdev->bd_inode); 138 139 while (bsize < PAGE_SIZE) { 140 if (size & bsize) 141 break; 142 bsize <<= 1; 143 } 144 bdev->bd_inode->i_blkbits = blksize_bits(bsize); > 145 mapping_set_folio_min_order(bdev->bd_inode->i_mapping, 146 get_order(bsize)); 147 } 148
Hi, kernel test robot noticed the following build errors: [auto build test ERROR on axboe-block/for-next] [also build test ERROR on akpm-mm/mm-everything linus/master v6.9-rc7] [cannot apply to next-20240510] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/hare-kernel-org/fs-mpage-use-blocks_per_folio-instead-of-blocks_per_page/20240510-183146 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next patch link: https://lore.kernel.org/r/20240510102906.51844-5-hare%40kernel.org patch subject: [PATCH 4/5] block/bdev: enable large folio support for large logical block sizes config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20240511/202405111438.WaVytRae-lkp@intel.com/config) compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240511/202405111438.WaVytRae-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202405111438.WaVytRae-lkp@intel.com/ All errors (new ones prefixed by >>): >> block/bdev.c:145:2: error: call to undeclared function 'mapping_set_folio_min_order'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 145 | mapping_set_folio_min_order(bdev->bd_inode->i_mapping, | ^ block/bdev.c:163:3: error: call to undeclared function 'mapping_set_folio_min_order'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 163 | mapping_set_folio_min_order(bdev->bd_inode->i_mapping, | ^ 2 errors generated. vim +/mapping_set_folio_min_order +145 block/bdev.c 133 134 static void set_init_blocksize(struct block_device *bdev) 135 { 136 unsigned int bsize = bdev_logical_block_size(bdev); 137 loff_t size = i_size_read(bdev->bd_inode); 138 139 while (bsize < PAGE_SIZE) { 140 if (size & bsize) 141 break; 142 bsize <<= 1; 143 } 144 bdev->bd_inode->i_blkbits = blksize_bits(bsize); > 145 mapping_set_folio_min_order(bdev->bd_inode->i_mapping, 146 get_order(bsize)); 147 } 148
On 5/11/24 00:35, Matthew Wilcox wrote: > On Fri, May 10, 2024 at 12:29:05PM +0200, hare@kernel.org wrote: >> From: Hannes Reinecke <hare@suse.de> >> >> Call mapping_set_folio_min_order() when modifying the logical block >> size to ensure folios are allocated with the correct size. > > This makes me nervous. It lets the pagecache allocate folios larger > than min_order (all the way up to PMD_ORDER). Filesystems may not > cope well with seeing tail pages. > > I'd _like_ to be able to do this. But I think for now we need to > call mapping_set_folio_order_range(mapping, order, order); > (Misrouted reply to the previous mail; airports make me jumpy ...) The whole point is that these devices cannot support smaller allocations. We might restrict ourselves to min_order == max_order, but we should be focussing on getting min_order working first ... Cheers, Hannes
diff --git a/block/bdev.c b/block/bdev.c index d37aa51b99ed..a0c0ecc886e8 100644 --- a/block/bdev.c +++ b/block/bdev.c @@ -142,6 +142,8 @@ static void set_init_blocksize(struct block_device *bdev) bsize <<= 1; } bdev->bd_inode->i_blkbits = blksize_bits(bsize); + mapping_set_folio_min_order(bdev->bd_inode->i_mapping, + get_order(bsize)); } int set_blocksize(struct block_device *bdev, int size) @@ -158,6 +160,8 @@ int set_blocksize(struct block_device *bdev, int size) if (bdev->bd_inode->i_blkbits != blksize_bits(size)) { sync_blockdev(bdev); bdev->bd_inode->i_blkbits = blksize_bits(size); + mapping_set_folio_min_order(bdev->bd_inode->i_mapping, + get_order(size)); kill_bdev(bdev); } return 0;