From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: Re: [PATCH 04/14] fs: Reduce stack usage in do_mpage_readpage
Date: Tue, 19 Dec 2023 08:31:24 +0800 [thread overview]
Message-ID: <202312190832.gq9q3uIB-lkp@intel.com> (raw)
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20231215200245.748418-5-willy@infradead.org>
References: <20231215200245.748418-5-willy@infradead.org>
TO: "Matthew Wilcox (Oracle)" <willy@infradead.org>
TO: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>
CC: "Matthew Wilcox (Oracle)" <willy@infradead.org>
CC: Christoph Hellwig <hch@lst.de>
CC: linux-fsdevel@vger.kernel.org
CC: linux-kernel@vger.kernel.org
CC: linux-block@vger.kernel.org
Hi Matthew,
kernel test robot noticed the following build warnings:
[auto build test WARNING on gfs2/for-next]
[also build test WARNING on akpm-mm/mm-everything axboe-block/for-next tytso-ext4/dev linus/master v6.7-rc6 next-20231218]
[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/Matthew-Wilcox-Oracle/fs-Remove-clean_page_buffers/20231216-040850
base: https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git for-next
patch link: https://lore.kernel.org/r/20231215200245.748418-5-willy%40infradead.org
patch subject: [PATCH 04/14] fs: Reduce stack usage in do_mpage_readpage
:::::: branch date: 3 days ago
:::::: commit date: 3 days ago
config: m68k-randconfig-r081-20231218 (https://download.01.org/0day-ci/archive/20231219/202312190832.gq9q3uIB-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 13.2.0
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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202312190832.gq9q3uIB-lkp@intel.com/
New smatch warnings:
fs/mpage.c:292 do_mpage_readpage() error: uninitialized symbol 'first_block'.
Old smatch warnings:
fs/mpage.c:301 do_mpage_readpage() error: uninitialized symbol 'first_block'.
fs/mpage.c:598 __mpage_writepage() error: uninitialized symbol 'first_block'.
fs/mpage.c:606 __mpage_writepage() error: uninitialized symbol 'first_block'.
vim +/first_block +292 fs/mpage.c
357c1206520da7 Jens Axboe 2018-08-17 148
fa30bd058b746c Badari Pulavarty 2006-03-26 149 /*
fa30bd058b746c Badari Pulavarty 2006-03-26 150 * This is the worker routine which does all the work of mapping the disk
fa30bd058b746c Badari Pulavarty 2006-03-26 151 * blocks and constructs largest possible bios, submits them for IO if the
fa30bd058b746c Badari Pulavarty 2006-03-26 152 * blocks are not contiguous on the disk.
fa30bd058b746c Badari Pulavarty 2006-03-26 153 *
fa30bd058b746c Badari Pulavarty 2006-03-26 154 * We pass a buffer_head back and forth and use its buffer_mapped() flag to
fa30bd058b746c Badari Pulavarty 2006-03-26 155 * represent the validity of its disk mapping and to decide when to do the next
fa30bd058b746c Badari Pulavarty 2006-03-26 156 * get_block() call.
fa30bd058b746c Badari Pulavarty 2006-03-26 157 */
357c1206520da7 Jens Axboe 2018-08-17 158 static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
^1da177e4c3f41 Linus Torvalds 2005-04-16 159 {
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 160) struct folio *folio = args->folio;
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 161) struct inode *inode = folio->mapping->host;
^1da177e4c3f41 Linus Torvalds 2005-04-16 162 const unsigned blkbits = inode->i_blkbits;
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01 163 const unsigned blocks_per_page = PAGE_SIZE >> blkbits;
^1da177e4c3f41 Linus Torvalds 2005-04-16 164 const unsigned blocksize = 1 << blkbits;
357c1206520da7 Jens Axboe 2018-08-17 165 struct buffer_head *map_bh = &args->map_bh;
^1da177e4c3f41 Linus Torvalds 2005-04-16 166 sector_t block_in_file;
^1da177e4c3f41 Linus Torvalds 2005-04-16 167 sector_t last_block;
fa30bd058b746c Badari Pulavarty 2006-03-26 168 sector_t last_block_in_file;
a87afca9df4be4 Matthew Wilcox (Oracle 2023-12-15 169) sector_t first_block;
^1da177e4c3f41 Linus Torvalds 2005-04-16 170 unsigned page_block;
^1da177e4c3f41 Linus Torvalds 2005-04-16 171 unsigned first_hole = blocks_per_page;
^1da177e4c3f41 Linus Torvalds 2005-04-16 172 struct block_device *bdev = NULL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 173 int length;
^1da177e4c3f41 Linus Torvalds 2005-04-16 174 int fully_mapped = 1;
f84c94afcf823c Bart Van Assche 2022-07-14 175 blk_opf_t opf = REQ_OP_READ;
fa30bd058b746c Badari Pulavarty 2006-03-26 176 unsigned nblocks;
fa30bd058b746c Badari Pulavarty 2006-03-26 177 unsigned relative_block;
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 178) gfp_t gfp = mapping_gfp_constraint(folio->mapping, GFP_KERNEL);
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 179)
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 180) /* MAX_BUF_PER_PAGE, for example */
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 181) VM_BUG_ON_FOLIO(folio_test_large(folio), folio);
74c8164e1cdb1e Jens Axboe 2018-08-17 182
74c8164e1cdb1e Jens Axboe 2018-08-17 183 if (args->is_readahead) {
f84c94afcf823c Bart Van Assche 2022-07-14 184 opf |= REQ_RAHEAD;
61285ff72ae59e Christoph Hellwig 2022-03-23 185 gfp |= __GFP_NORETRY | __GFP_NOWARN;
74c8164e1cdb1e Jens Axboe 2018-08-17 186 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 187
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 188) if (folio_buffers(folio))
^1da177e4c3f41 Linus Torvalds 2005-04-16 189 goto confused;
^1da177e4c3f41 Linus Torvalds 2005-04-16 190
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 191) block_in_file = (sector_t)folio->index << (PAGE_SHIFT - blkbits);
357c1206520da7 Jens Axboe 2018-08-17 192 last_block = block_in_file + args->nr_pages * blocks_per_page;
fa30bd058b746c Badari Pulavarty 2006-03-26 193 last_block_in_file = (i_size_read(inode) + blocksize - 1) >> blkbits;
fa30bd058b746c Badari Pulavarty 2006-03-26 194 if (last_block > last_block_in_file)
fa30bd058b746c Badari Pulavarty 2006-03-26 195 last_block = last_block_in_file;
fa30bd058b746c Badari Pulavarty 2006-03-26 196 page_block = 0;
fa30bd058b746c Badari Pulavarty 2006-03-26 197
fa30bd058b746c Badari Pulavarty 2006-03-26 198 /*
fa30bd058b746c Badari Pulavarty 2006-03-26 199 * Map blocks using the result from the previous get_blocks call first.
fa30bd058b746c Badari Pulavarty 2006-03-26 200 */
fa30bd058b746c Badari Pulavarty 2006-03-26 201 nblocks = map_bh->b_size >> blkbits;
357c1206520da7 Jens Axboe 2018-08-17 202 if (buffer_mapped(map_bh) &&
357c1206520da7 Jens Axboe 2018-08-17 203 block_in_file > args->first_logical_block &&
357c1206520da7 Jens Axboe 2018-08-17 204 block_in_file < (args->first_logical_block + nblocks)) {
357c1206520da7 Jens Axboe 2018-08-17 205 unsigned map_offset = block_in_file - args->first_logical_block;
fa30bd058b746c Badari Pulavarty 2006-03-26 206 unsigned last = nblocks - map_offset;
fa30bd058b746c Badari Pulavarty 2006-03-26 207
a87afca9df4be4 Matthew Wilcox (Oracle 2023-12-15 208) first_block = map_bh->b_blocknr + map_offset;
fa30bd058b746c Badari Pulavarty 2006-03-26 209 for (relative_block = 0; ; relative_block++) {
fa30bd058b746c Badari Pulavarty 2006-03-26 210 if (relative_block == last) {
fa30bd058b746c Badari Pulavarty 2006-03-26 211 clear_buffer_mapped(map_bh);
fa30bd058b746c Badari Pulavarty 2006-03-26 212 break;
fa30bd058b746c Badari Pulavarty 2006-03-26 213 }
fa30bd058b746c Badari Pulavarty 2006-03-26 214 if (page_block == blocks_per_page)
fa30bd058b746c Badari Pulavarty 2006-03-26 215 break;
fa30bd058b746c Badari Pulavarty 2006-03-26 216 page_block++;
fa30bd058b746c Badari Pulavarty 2006-03-26 217 block_in_file++;
fa30bd058b746c Badari Pulavarty 2006-03-26 218 }
fa30bd058b746c Badari Pulavarty 2006-03-26 219 bdev = map_bh->b_bdev;
fa30bd058b746c Badari Pulavarty 2006-03-26 220 }
fa30bd058b746c Badari Pulavarty 2006-03-26 221
fa30bd058b746c Badari Pulavarty 2006-03-26 222 /*
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 223) * Then do more get_blocks calls until we are done with this folio.
fa30bd058b746c Badari Pulavarty 2006-03-26 224 */
a5fd8390d2b2db Matthew Wilcox (Oracle 2022-12-15 225) map_bh->b_folio = folio;
fa30bd058b746c Badari Pulavarty 2006-03-26 226 while (page_block < blocks_per_page) {
fa30bd058b746c Badari Pulavarty 2006-03-26 227 map_bh->b_state = 0;
fa30bd058b746c Badari Pulavarty 2006-03-26 228 map_bh->b_size = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 229
^1da177e4c3f41 Linus Torvalds 2005-04-16 230 if (block_in_file < last_block) {
fa30bd058b746c Badari Pulavarty 2006-03-26 231 map_bh->b_size = (last_block-block_in_file) << blkbits;
357c1206520da7 Jens Axboe 2018-08-17 232 if (args->get_block(inode, block_in_file, map_bh, 0))
^1da177e4c3f41 Linus Torvalds 2005-04-16 233 goto confused;
357c1206520da7 Jens Axboe 2018-08-17 234 args->first_logical_block = block_in_file;
^1da177e4c3f41 Linus Torvalds 2005-04-16 235 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 236
fa30bd058b746c Badari Pulavarty 2006-03-26 237 if (!buffer_mapped(map_bh)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 238 fully_mapped = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 239 if (first_hole == blocks_per_page)
^1da177e4c3f41 Linus Torvalds 2005-04-16 240 first_hole = page_block;
fa30bd058b746c Badari Pulavarty 2006-03-26 241 page_block++;
fa30bd058b746c Badari Pulavarty 2006-03-26 242 block_in_file++;
^1da177e4c3f41 Linus Torvalds 2005-04-16 243 continue;
^1da177e4c3f41 Linus Torvalds 2005-04-16 244 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 245
^1da177e4c3f41 Linus Torvalds 2005-04-16 246 /* some filesystems will copy data into the page during
^1da177e4c3f41 Linus Torvalds 2005-04-16 247 * the get_block call, in which case we don't want to
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 248) * read it again. map_buffer_to_folio copies the data
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 249) * we just collected from get_block into the folio's buffers
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 250) * so read_folio doesn't have to repeat the get_block call
^1da177e4c3f41 Linus Torvalds 2005-04-16 251 */
fa30bd058b746c Badari Pulavarty 2006-03-26 252 if (buffer_uptodate(map_bh)) {
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 253) map_buffer_to_folio(folio, map_bh, page_block);
^1da177e4c3f41 Linus Torvalds 2005-04-16 254 goto confused;
^1da177e4c3f41 Linus Torvalds 2005-04-16 255 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 256
^1da177e4c3f41 Linus Torvalds 2005-04-16 257 if (first_hole != blocks_per_page)
^1da177e4c3f41 Linus Torvalds 2005-04-16 258 goto confused; /* hole -> non-hole */
^1da177e4c3f41 Linus Torvalds 2005-04-16 259
^1da177e4c3f41 Linus Torvalds 2005-04-16 260 /* Contiguous blocks? */
a87afca9df4be4 Matthew Wilcox (Oracle 2023-12-15 261) if (!page_block)
a87afca9df4be4 Matthew Wilcox (Oracle 2023-12-15 262) first_block = map_bh->b_blocknr;
a87afca9df4be4 Matthew Wilcox (Oracle 2023-12-15 263) else if (first_block + page_block != map_bh->b_blocknr)
^1da177e4c3f41 Linus Torvalds 2005-04-16 264 goto confused;
fa30bd058b746c Badari Pulavarty 2006-03-26 265 nblocks = map_bh->b_size >> blkbits;
fa30bd058b746c Badari Pulavarty 2006-03-26 266 for (relative_block = 0; ; relative_block++) {
fa30bd058b746c Badari Pulavarty 2006-03-26 267 if (relative_block == nblocks) {
fa30bd058b746c Badari Pulavarty 2006-03-26 268 clear_buffer_mapped(map_bh);
fa30bd058b746c Badari Pulavarty 2006-03-26 269 break;
fa30bd058b746c Badari Pulavarty 2006-03-26 270 } else if (page_block == blocks_per_page)
fa30bd058b746c Badari Pulavarty 2006-03-26 271 break;
fa30bd058b746c Badari Pulavarty 2006-03-26 272 page_block++;
fa30bd058b746c Badari Pulavarty 2006-03-26 273 block_in_file++;
fa30bd058b746c Badari Pulavarty 2006-03-26 274 }
fa30bd058b746c Badari Pulavarty 2006-03-26 275 bdev = map_bh->b_bdev;
^1da177e4c3f41 Linus Torvalds 2005-04-16 276 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 277
^1da177e4c3f41 Linus Torvalds 2005-04-16 278 if (first_hole != blocks_per_page) {
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 279) folio_zero_segment(folio, first_hole << blkbits, PAGE_SIZE);
^1da177e4c3f41 Linus Torvalds 2005-04-16 280 if (first_hole == 0) {
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 281) folio_mark_uptodate(folio);
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 282) folio_unlock(folio);
^1da177e4c3f41 Linus Torvalds 2005-04-16 283 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 284 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 285 } else if (fully_mapped) {
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 286) folio_set_mappedtodisk(folio);
^1da177e4c3f41 Linus Torvalds 2005-04-16 287 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 288
^1da177e4c3f41 Linus Torvalds 2005-04-16 289 /*
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 290) * This folio will go to BIO. Do we need to send this BIO off first?
^1da177e4c3f41 Linus Torvalds 2005-04-16 291 */
a87afca9df4be4 Matthew Wilcox (Oracle 2023-12-15 @292) if (args->bio && (args->last_block_in_bio != first_block - 1))
f0d6ca46d68670 Pankaj Raghav 2023-04-11 293 args->bio = mpage_bio_submit_read(args->bio);
^1da177e4c3f41 Linus Torvalds 2005-04-16 294
^1da177e4c3f41 Linus Torvalds 2005-04-16 295 alloc_new:
357c1206520da7 Jens Axboe 2018-08-17 296 if (args->bio == NULL) {
f84c94afcf823c Bart Van Assche 2022-07-14 297 args->bio = bio_alloc(bdev, bio_max_segs(args->nr_pages), opf,
07888c665b405b Christoph Hellwig 2022-01-24 298 gfp);
357c1206520da7 Jens Axboe 2018-08-17 299 if (args->bio == NULL)
^1da177e4c3f41 Linus Torvalds 2005-04-16 300 goto confused;
a87afca9df4be4 Matthew Wilcox (Oracle 2023-12-15 301) args->bio->bi_iter.bi_sector = first_block << (blkbits - 9);
^1da177e4c3f41 Linus Torvalds 2005-04-16 302 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 303
^1da177e4c3f41 Linus Torvalds 2005-04-16 304 length = first_hole << blkbits;
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 305) if (!bio_add_folio(args->bio, folio, length, 0)) {
f0d6ca46d68670 Pankaj Raghav 2023-04-11 306 args->bio = mpage_bio_submit_read(args->bio);
^1da177e4c3f41 Linus Torvalds 2005-04-16 307 goto alloc_new;
^1da177e4c3f41 Linus Torvalds 2005-04-16 308 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 309
357c1206520da7 Jens Axboe 2018-08-17 310 relative_block = block_in_file - args->first_logical_block;
38c8e6180939e5 Miquel van Smoorenburg 2009-01-06 311 nblocks = map_bh->b_size >> blkbits;
38c8e6180939e5 Miquel van Smoorenburg 2009-01-06 312 if ((buffer_boundary(map_bh) && relative_block == nblocks) ||
38c8e6180939e5 Miquel van Smoorenburg 2009-01-06 313 (first_hole != blocks_per_page))
f0d6ca46d68670 Pankaj Raghav 2023-04-11 314 args->bio = mpage_bio_submit_read(args->bio);
^1da177e4c3f41 Linus Torvalds 2005-04-16 315 else
a87afca9df4be4 Matthew Wilcox (Oracle 2023-12-15 316) args->last_block_in_bio = first_block + blocks_per_page - 1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 317 out:
357c1206520da7 Jens Axboe 2018-08-17 318 return args->bio;
^1da177e4c3f41 Linus Torvalds 2005-04-16 319
^1da177e4c3f41 Linus Torvalds 2005-04-16 320 confused:
357c1206520da7 Jens Axboe 2018-08-17 321 if (args->bio)
f0d6ca46d68670 Pankaj Raghav 2023-04-11 322 args->bio = mpage_bio_submit_read(args->bio);
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 323) if (!folio_test_uptodate(folio))
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 324) block_read_full_folio(folio, args->get_block);
^1da177e4c3f41 Linus Torvalds 2005-04-16 325 else
211d04445b96db Matthew Wilcox (Oracle 2022-06-10 326) folio_unlock(folio);
^1da177e4c3f41 Linus Torvalds 2005-04-16 327 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 328 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 329
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2023-12-19 0:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-19 0:31 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2023-12-19 17:47 [PATCH 04/14] fs: Reduce stack usage in do_mpage_readpage kernel test robot
2023-12-15 20:02 [PATCH 00/14] Clean up the writeback paths Matthew Wilcox (Oracle)
2023-12-15 20:02 ` [PATCH 04/14] fs: Reduce stack usage in do_mpage_readpage Matthew Wilcox (Oracle)
2023-12-16 4:29 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202312190832.gq9q3uIB-lkp@intel.com \
--to=lkp@intel.com \
--cc=error27@gmail.com \
--cc=oe-kbuild@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.