fs/ntfs/aops.c:378:12: warning: stack frame size of 2288 bytes in function 'ntfs_readpage'
From: kernel test robot
Date: Sat Mar 27 2021 - 18:18:02 EST
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 0f4498cef9f5cd18d7c6639a2a902ec1edc5be4e
commit: 4eeef098b43242ed145c83fba9989d586d707589 powerpc/44x: Remove STDBINUTILS kconfig option
date: 8 weeks ago
config: powerpc64-randconfig-r036-20210328 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project d50fe9f0d6b9ee61df8830a67ea0a33c27a637e7)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install powerpc64 cross compiling tool for clang build
# apt-get install binutils-powerpc64-linux-gnu
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4eeef098b43242ed145c83fba9989d586d707589
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 4eeef098b43242ed145c83fba9989d586d707589
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>
All warnings (new ones prefixed by >>):
>> fs/ntfs/aops.c:378:12: warning: stack frame size of 2288 bytes in function 'ntfs_readpage' [-Wframe-larger-than=]
static int ntfs_readpage(struct file *file, struct page *page)
^
1 warning generated.
--
>> net/bluetooth/hci_core.c:2108:26: warning: result of comparison of constant 65536 with expression of type '__u16' (aka 'unsigned short') is always false [-Wtautological-constant-out-of-range-compare]
if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
~~~~~~~~~~~~~~~~~^~~~~
include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
(cond) ? \
^~~~
>> net/bluetooth/hci_core.c:2108:26: warning: result of comparison of constant 65536 with expression of type '__u16' (aka 'unsigned short') is always false [-Wtautological-constant-out-of-range-compare]
if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
>> net/bluetooth/hci_core.c:2108:26: warning: result of comparison of constant 65536 with expression of type '__u16' (aka 'unsigned short') is always false [-Wtautological-constant-out-of-range-compare]
if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:56:47: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:58:61: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~
3 warnings generated.
vim +/ntfs_readpage +378 fs/ntfs/aops.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 359
^1da177e4c3f41 Linus Torvalds 2005-04-16 360 /**
^1da177e4c3f41 Linus Torvalds 2005-04-16 361 * ntfs_readpage - fill a @page of a @file with data from the device
^1da177e4c3f41 Linus Torvalds 2005-04-16 362 * @file: open file to which the page @page belongs or NULL
^1da177e4c3f41 Linus Torvalds 2005-04-16 363 * @page: page cache page to fill with data
^1da177e4c3f41 Linus Torvalds 2005-04-16 364 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 365 * For non-resident attributes, ntfs_readpage() fills the @page of the open
^1da177e4c3f41 Linus Torvalds 2005-04-16 366 * file @file by calling the ntfs version of the generic block_read_full_page()
^1da177e4c3f41 Linus Torvalds 2005-04-16 367 * function, ntfs_read_block(), which in turn creates and reads in the buffers
^1da177e4c3f41 Linus Torvalds 2005-04-16 368 * associated with the page asynchronously.
^1da177e4c3f41 Linus Torvalds 2005-04-16 369 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 370 * For resident attributes, OTOH, ntfs_readpage() fills @page by copying the
^1da177e4c3f41 Linus Torvalds 2005-04-16 371 * data from the mft record (which at this stage is most likely in memory) and
^1da177e4c3f41 Linus Torvalds 2005-04-16 372 * fills the remainder with zeroes. Thus, in this case, I/O is synchronous, as
^1da177e4c3f41 Linus Torvalds 2005-04-16 373 * even if the mft record is not cached at this point in time, we need to wait
^1da177e4c3f41 Linus Torvalds 2005-04-16 374 * for it to be read in before we can do the copy.
^1da177e4c3f41 Linus Torvalds 2005-04-16 375 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 376 * Return 0 on success and -errno on error.
^1da177e4c3f41 Linus Torvalds 2005-04-16 377 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 @378 static int ntfs_readpage(struct file *file, struct page *page)
^1da177e4c3f41 Linus Torvalds 2005-04-16 379 {
f6098cf449b81c Anton Altaparmakov 2005-09-19 380 loff_t i_size;
f6098cf449b81c Anton Altaparmakov 2005-09-19 381 struct inode *vi;
^1da177e4c3f41 Linus Torvalds 2005-04-16 382 ntfs_inode *ni, *base_ni;
bfab36e81611e6 Anton Altaparmakov 2007-10-12 383 u8 *addr;
^1da177e4c3f41 Linus Torvalds 2005-04-16 384 ntfs_attr_search_ctx *ctx;
^1da177e4c3f41 Linus Torvalds 2005-04-16 385 MFT_RECORD *mrec;
b6ad6c52fe36ab Anton Altaparmakov 2005-02-15 386 unsigned long flags;
^1da177e4c3f41 Linus Torvalds 2005-04-16 387 u32 attr_len;
^1da177e4c3f41 Linus Torvalds 2005-04-16 388 int err = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 389
905685f68fc728 Anton Altaparmakov 2005-03-10 390 retry_readpage:
^1da177e4c3f41 Linus Torvalds 2005-04-16 391 BUG_ON(!PageLocked(page));
ebab89909e0dc7 Anton Altaparmakov 2007-11-03 392 vi = page->mapping->host;
ebab89909e0dc7 Anton Altaparmakov 2007-11-03 393 i_size = i_size_read(vi);
ebab89909e0dc7 Anton Altaparmakov 2007-11-03 394 /* Is the page fully outside i_size? (truncate in progress) */
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01 395 if (unlikely(page->index >= (i_size + PAGE_SIZE - 1) >>
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01 396 PAGE_SHIFT)) {
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01 397 zero_user(page, 0, PAGE_SIZE);
ebab89909e0dc7 Anton Altaparmakov 2007-11-03 398 ntfs_debug("Read outside i_size - truncated?");
ebab89909e0dc7 Anton Altaparmakov 2007-11-03 399 goto done;
ebab89909e0dc7 Anton Altaparmakov 2007-11-03 400 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 401 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 402 * This can potentially happen because we clear PageUptodate() during
^1da177e4c3f41 Linus Torvalds 2005-04-16 403 * ntfs_writepage() of MstProtected() attributes.
^1da177e4c3f41 Linus Torvalds 2005-04-16 404 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 405 if (PageUptodate(page)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 406 unlock_page(page);
^1da177e4c3f41 Linus Torvalds 2005-04-16 407 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 408 }
f6098cf449b81c Anton Altaparmakov 2005-09-19 409 ni = NTFS_I(vi);
^1da177e4c3f41 Linus Torvalds 2005-04-16 410 /*
311120eca00130 Anton Altaparmakov 2005-09-08 411 * Only $DATA attributes can be encrypted and only unnamed $DATA
311120eca00130 Anton Altaparmakov 2005-09-08 412 * attributes can be compressed. Index root can have the flags set but
311120eca00130 Anton Altaparmakov 2005-09-08 413 * this means to create compressed/encrypted files, not that the
4e64c88693fde1 Anton Altaparmakov 2005-09-19 414 * attribute is compressed/encrypted. Note we need to check for
4e64c88693fde1 Anton Altaparmakov 2005-09-19 415 * AT_INDEX_ALLOCATION since this is the type of both directory and
4e64c88693fde1 Anton Altaparmakov 2005-09-19 416 * index inodes.
^1da177e4c3f41 Linus Torvalds 2005-04-16 417 */
4e64c88693fde1 Anton Altaparmakov 2005-09-19 418 if (ni->type != AT_INDEX_ALLOCATION) {
311120eca00130 Anton Altaparmakov 2005-09-08 419 /* If attribute is encrypted, deny access, just like NT4. */
^1da177e4c3f41 Linus Torvalds 2005-04-16 420 if (NInoEncrypted(ni)) {
311120eca00130 Anton Altaparmakov 2005-09-08 421 BUG_ON(ni->type != AT_DATA);
^1da177e4c3f41 Linus Torvalds 2005-04-16 422 err = -EACCES;
^1da177e4c3f41 Linus Torvalds 2005-04-16 423 goto err_out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 424 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 425 /* Compressed data streams are handled in compress.c. */
311120eca00130 Anton Altaparmakov 2005-09-08 426 if (NInoNonResident(ni) && NInoCompressed(ni)) {
311120eca00130 Anton Altaparmakov 2005-09-08 427 BUG_ON(ni->type != AT_DATA);
311120eca00130 Anton Altaparmakov 2005-09-08 428 BUG_ON(ni->name_len);
^1da177e4c3f41 Linus Torvalds 2005-04-16 429 return ntfs_read_compressed_block(page);
^1da177e4c3f41 Linus Torvalds 2005-04-16 430 }
311120eca00130 Anton Altaparmakov 2005-09-08 431 }
311120eca00130 Anton Altaparmakov 2005-09-08 432 /* NInoNonResident() == NInoIndexAllocPresent() */
311120eca00130 Anton Altaparmakov 2005-09-08 433 if (NInoNonResident(ni)) {
311120eca00130 Anton Altaparmakov 2005-09-08 434 /* Normal, non-resident data stream. */
^1da177e4c3f41 Linus Torvalds 2005-04-16 435 return ntfs_read_block(page);
^1da177e4c3f41 Linus Torvalds 2005-04-16 436 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 437 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 438 * Attribute is resident, implying it is not compressed or encrypted.
^1da177e4c3f41 Linus Torvalds 2005-04-16 439 * This also means the attribute is smaller than an mft record and
^1da177e4c3f41 Linus Torvalds 2005-04-16 440 * hence smaller than a page, so can simply zero out any pages with
311120eca00130 Anton Altaparmakov 2005-09-08 441 * index above 0. Note the attribute can actually be marked compressed
311120eca00130 Anton Altaparmakov 2005-09-08 442 * but if it is resident the actual data is not compressed so we are
311120eca00130 Anton Altaparmakov 2005-09-08 443 * ok to ignore the compressed flag here.
^1da177e4c3f41 Linus Torvalds 2005-04-16 444 */
b6ad6c52fe36ab Anton Altaparmakov 2005-02-15 445 if (unlikely(page->index > 0)) {
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01 446 zero_user(page, 0, PAGE_SIZE);
^1da177e4c3f41 Linus Torvalds 2005-04-16 447 goto done;
^1da177e4c3f41 Linus Torvalds 2005-04-16 448 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 449 if (!NInoAttr(ni))
^1da177e4c3f41 Linus Torvalds 2005-04-16 450 base_ni = ni;
^1da177e4c3f41 Linus Torvalds 2005-04-16 451 else
^1da177e4c3f41 Linus Torvalds 2005-04-16 452 base_ni = ni->ext.base_ntfs_ino;
^1da177e4c3f41 Linus Torvalds 2005-04-16 453 /* Map, pin, and lock the mft record. */
^1da177e4c3f41 Linus Torvalds 2005-04-16 454 mrec = map_mft_record(base_ni);
^1da177e4c3f41 Linus Torvalds 2005-04-16 455 if (IS_ERR(mrec)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 456 err = PTR_ERR(mrec);
^1da177e4c3f41 Linus Torvalds 2005-04-16 457 goto err_out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 458 }
905685f68fc728 Anton Altaparmakov 2005-03-10 459 /*
905685f68fc728 Anton Altaparmakov 2005-03-10 460 * If a parallel write made the attribute non-resident, drop the mft
905685f68fc728 Anton Altaparmakov 2005-03-10 461 * record and retry the readpage.
905685f68fc728 Anton Altaparmakov 2005-03-10 462 */
905685f68fc728 Anton Altaparmakov 2005-03-10 463 if (unlikely(NInoNonResident(ni))) {
905685f68fc728 Anton Altaparmakov 2005-03-10 464 unmap_mft_record(base_ni);
905685f68fc728 Anton Altaparmakov 2005-03-10 465 goto retry_readpage;
905685f68fc728 Anton Altaparmakov 2005-03-10 466 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 467 ctx = ntfs_attr_get_search_ctx(base_ni, mrec);
^1da177e4c3f41 Linus Torvalds 2005-04-16 468 if (unlikely(!ctx)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 469 err = -ENOMEM;
^1da177e4c3f41 Linus Torvalds 2005-04-16 470 goto unm_err_out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 471 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 472 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
^1da177e4c3f41 Linus Torvalds 2005-04-16 473 CASE_SENSITIVE, 0, NULL, 0, ctx);
^1da177e4c3f41 Linus Torvalds 2005-04-16 474 if (unlikely(err))
^1da177e4c3f41 Linus Torvalds 2005-04-16 475 goto put_unm_err_out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 476 attr_len = le32_to_cpu(ctx->attr->data.resident.value_length);
b6ad6c52fe36ab Anton Altaparmakov 2005-02-15 477 read_lock_irqsave(&ni->size_lock, flags);
b6ad6c52fe36ab Anton Altaparmakov 2005-02-15 478 if (unlikely(attr_len > ni->initialized_size))
b6ad6c52fe36ab Anton Altaparmakov 2005-02-15 479 attr_len = ni->initialized_size;
f6098cf449b81c Anton Altaparmakov 2005-09-19 480 i_size = i_size_read(vi);
b6ad6c52fe36ab Anton Altaparmakov 2005-02-15 481 read_unlock_irqrestore(&ni->size_lock, flags);
f6098cf449b81c Anton Altaparmakov 2005-09-19 482 if (unlikely(attr_len > i_size)) {
f6098cf449b81c Anton Altaparmakov 2005-09-19 483 /* Race with shrinking truncate. */
f6098cf449b81c Anton Altaparmakov 2005-09-19 484 attr_len = i_size;
f6098cf449b81c Anton Altaparmakov 2005-09-19 485 }
a3ac1414eb6011 Cong Wang 2011-11-25 486 addr = kmap_atomic(page);
^1da177e4c3f41 Linus Torvalds 2005-04-16 487 /* Copy the data to the page. */
bfab36e81611e6 Anton Altaparmakov 2007-10-12 488 memcpy(addr, (u8*)ctx->attr +
^1da177e4c3f41 Linus Torvalds 2005-04-16 489 le16_to_cpu(ctx->attr->data.resident.value_offset),
^1da177e4c3f41 Linus Torvalds 2005-04-16 490 attr_len);
^1da177e4c3f41 Linus Torvalds 2005-04-16 491 /* Zero the remainder of the page. */
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01 492 memset(addr + attr_len, 0, PAGE_SIZE - attr_len);
^1da177e4c3f41 Linus Torvalds 2005-04-16 493 flush_dcache_page(page);
a3ac1414eb6011 Cong Wang 2011-11-25 494 kunmap_atomic(addr);
^1da177e4c3f41 Linus Torvalds 2005-04-16 495 put_unm_err_out:
^1da177e4c3f41 Linus Torvalds 2005-04-16 496 ntfs_attr_put_search_ctx(ctx);
^1da177e4c3f41 Linus Torvalds 2005-04-16 497 unm_err_out:
^1da177e4c3f41 Linus Torvalds 2005-04-16 498 unmap_mft_record(base_ni);
^1da177e4c3f41 Linus Torvalds 2005-04-16 499 done:
^1da177e4c3f41 Linus Torvalds 2005-04-16 500 SetPageUptodate(page);
^1da177e4c3f41 Linus Torvalds 2005-04-16 501 err_out:
^1da177e4c3f41 Linus Torvalds 2005-04-16 502 unlock_page(page);
^1da177e4c3f41 Linus Torvalds 2005-04-16 503 return err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 504 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 505
:::::: The code at line 378 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2
:::::: TO: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx>
:::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip