From: kernel test robot <lkp@intel.com>
To: David Howells <dhowells@redhat.com>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [dhowells-fs:ceph-iter 52/87] fs/ceph/inode.c:2492:6: warning: variable 'header' is used uninitialized whenever 'if' condition is true
Date: Sat, 05 Sep 2026 01:42:43 +0200 [thread overview]
Message-ID: <202609050154.osd6wrTN-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git ceph-iter
head: 376ad9d4942bf11500931178bbeb965348f01057
commit: e52f99c9eea903bf2dc1fb18fae2bc0c49875445 [52/87] ceph: Convert ceph_mds_request::r_pagelist to a databuf
config: x86_64-allmodconfig (https://download.01.org/0day-ci/archive/20260905/202609050154.osd6wrTN-lkp@intel.com/config)
compiler: clang version 22.1.8 (https://github.com/llvm/llvm-project ca7933e47d3a3451d81e72ac174dcb5aa28b59d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260905/202609050154.osd6wrTN-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/202609050154.osd6wrTN-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> fs/ceph/inode.c:2492:6: warning: variable 'header' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2492 | if (ret < 0)
| ^~~~~~~
fs/ceph/inode.c:2552:15: note: uninitialized use occurs here
2552 | kunmap_local(header);
| ^~~~~~
fs/ceph/inode.c:2492:2: note: remove the 'if' if its condition is always false
2492 | if (ret < 0)
| ^~~~~~~~~~~~
2493 | goto out;
| ~~~~~~~~
fs/ceph/inode.c:2484:6: warning: variable 'header' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2484 | if (ceph_bvecq_insert_frag(dbuf, 0, sizeof(*header), GFP_KERNEL) < 0 ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2485 | ceph_bvecq_insert_frag(dbuf, 1, PAGE_SIZE, GFP_KERNEL) < 0)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/ceph/inode.c:2552:15: note: uninitialized use occurs here
2552 | kunmap_local(header);
| ^~~~~~
fs/ceph/inode.c:2484:2: note: remove the 'if' if its condition is always false
2484 | if (ceph_bvecq_insert_frag(dbuf, 0, sizeof(*header), GFP_KERNEL) < 0 ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2485 | ceph_bvecq_insert_frag(dbuf, 1, PAGE_SIZE, GFP_KERNEL) < 0)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2486 | goto out;
| ~~~~~~~~
>> fs/ceph/inode.c:2484:6: warning: variable 'header' is used uninitialized whenever '||' condition is true [-Wsometimes-uninitialized]
2484 | if (ceph_bvecq_insert_frag(dbuf, 0, sizeof(*header), GFP_KERNEL) < 0 ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/ceph/inode.c:2552:15: note: uninitialized use occurs here
2552 | kunmap_local(header);
| ^~~~~~
fs/ceph/inode.c:2484:6: note: remove the '||' if its condition is always false
2484 | if (ceph_bvecq_insert_frag(dbuf, 0, sizeof(*header), GFP_KERNEL) < 0 ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/ceph/inode.c:2481:6: warning: variable 'header' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2481 | if (!dbuf)
| ^~~~~
fs/ceph/inode.c:2552:15: note: uninitialized use occurs here
2552 | kunmap_local(header);
| ^~~~~~
fs/ceph/inode.c:2481:2: note: remove the 'if' if its condition is always false
2481 | if (!dbuf)
| ^~~~~~~~~~
2482 | goto out;
| ~~~~~~~~
fs/ceph/inode.c:2475:7: warning: variable 'header' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
2475 | if (ret < 0)
| ^~~~~~~
fs/ceph/inode.c:2552:15: note: uninitialized use occurs here
2552 | kunmap_local(header);
| ^~~~~~
fs/ceph/inode.c:2475:3: note: remove the 'if' if its condition is always false
2475 | if (ret < 0)
| ^~~~~~~~~~~~
2476 | goto out;
| ~~~~~~~~
fs/ceph/inode.c:2451:50: note: initialize the variable 'header' to silence this warning
2451 | struct ceph_fscrypt_truncate_size_header *header;
| ^
| = NULL
5 warnings generated.
vim +2492 fs/ceph/inode.c
79f2f6ad878c1f Jeff Layton 2020-09-03 2431
5c64737d253683 Xiubo Li 2022-08-25 2432 /*
5c64737d253683 Xiubo Li 2022-08-25 2433 * Transfer the encrypted last block to the MDS and the MDS
5c64737d253683 Xiubo Li 2022-08-25 2434 * will help update it when truncating a smaller size.
5c64737d253683 Xiubo Li 2022-08-25 2435 *
5c64737d253683 Xiubo Li 2022-08-25 2436 * We don't support a PAGE_SIZE that is smaller than the
5c64737d253683 Xiubo Li 2022-08-25 2437 * CEPH_FSCRYPT_BLOCK_SIZE.
5c64737d253683 Xiubo Li 2022-08-25 2438 */
5c64737d253683 Xiubo Li 2022-08-25 2439 static int fill_fscrypt_truncate(struct inode *inode,
5c64737d253683 Xiubo Li 2022-08-25 2440 struct ceph_mds_request *req,
5c64737d253683 Xiubo Li 2022-08-25 2441 struct iattr *attr)
5c64737d253683 Xiubo Li 2022-08-25 2442 {
38d46409c4639a Xiubo Li 2023-06-12 2443 struct ceph_client *cl = ceph_inode_to_client(inode);
5c64737d253683 Xiubo Li 2022-08-25 2444 struct ceph_inode_info *ci = ceph_inode(inode);
5c64737d253683 Xiubo Li 2022-08-25 2445 int boff = attr->ia_size % CEPH_FSCRYPT_BLOCK_SIZE;
5c64737d253683 Xiubo Li 2022-08-25 2446 loff_t pos, orig_pos = round_down(attr->ia_size,
5c64737d253683 Xiubo Li 2022-08-25 2447 CEPH_FSCRYPT_BLOCK_SIZE);
5c64737d253683 Xiubo Li 2022-08-25 2448 u64 block = orig_pos >> CEPH_FSCRYPT_BLOCK_SHIFT;
e52f99c9eea903 David Howells 2023-08-03 2449 struct bvecq *dbuf = NULL;
5c64737d253683 Xiubo Li 2022-08-25 2450 struct iov_iter iter;
e52f99c9eea903 David Howells 2023-08-03 2451 struct ceph_fscrypt_truncate_size_header *header;
e52f99c9eea903 David Howells 2023-08-03 2452 void *p;
5c64737d253683 Xiubo Li 2022-08-25 2453 int retry_op = 0;
5c64737d253683 Xiubo Li 2022-08-25 2454 int len = CEPH_FSCRYPT_BLOCK_SIZE;
5c64737d253683 Xiubo Li 2022-08-25 2455 loff_t i_size = i_size_read(inode);
5c64737d253683 Xiubo Li 2022-08-25 2456 int got, ret, issued;
5c64737d253683 Xiubo Li 2022-08-25 2457 u64 objver;
5c64737d253683 Xiubo Li 2022-08-25 2458
5c64737d253683 Xiubo Li 2022-08-25 2459 ret = __ceph_get_caps(inode, NULL, CEPH_CAP_FILE_RD, 0, -1, &got);
5c64737d253683 Xiubo Li 2022-08-25 2460 if (ret < 0)
5c64737d253683 Xiubo Li 2022-08-25 2461 return ret;
5c64737d253683 Xiubo Li 2022-08-25 2462
5c64737d253683 Xiubo Li 2022-08-25 2463 issued = __ceph_caps_issued(ci, NULL);
5c64737d253683 Xiubo Li 2022-08-25 2464
38d46409c4639a Xiubo Li 2023-06-12 2465 doutc(cl, "size %lld -> %lld got cap refs on %s, issued %s\n",
5c64737d253683 Xiubo Li 2022-08-25 2466 i_size, attr->ia_size, ceph_cap_string(got),
5c64737d253683 Xiubo Li 2022-08-25 2467 ceph_cap_string(issued));
5c64737d253683 Xiubo Li 2022-08-25 2468
5c64737d253683 Xiubo Li 2022-08-25 2469 /* Try to writeback the dirty pagecaches */
5c64737d253683 Xiubo Li 2022-08-25 2470 if (issued & (CEPH_CAP_FILE_BUFFER)) {
f452a2204614fc David Howells 2025-03-12 2471 loff_t lend = orig_pos + CEPH_FSCRYPT_BLOCK_SIZE - 1;
5c64737d253683 Xiubo Li 2022-08-25 2472
5c64737d253683 Xiubo Li 2022-08-25 2473 ret = filemap_write_and_wait_range(inode->i_mapping,
5c64737d253683 Xiubo Li 2022-08-25 2474 orig_pos, lend);
5c64737d253683 Xiubo Li 2022-08-25 2475 if (ret < 0)
5c64737d253683 Xiubo Li 2022-08-25 2476 goto out;
5c64737d253683 Xiubo Li 2022-08-25 2477 }
5c64737d253683 Xiubo Li 2022-08-25 2478
5c64737d253683 Xiubo Li 2022-08-25 2479 ret = -ENOMEM;
e52f99c9eea903 David Howells 2023-08-03 2480 dbuf = bvecq_alloc_chain(2, GFP_KERNEL, false);
e52f99c9eea903 David Howells 2023-08-03 2481 if (!dbuf)
5c64737d253683 Xiubo Li 2022-08-25 2482 goto out;
5c64737d253683 Xiubo Li 2022-08-25 2483
e52f99c9eea903 David Howells 2023-08-03 @2484 if (ceph_bvecq_insert_frag(dbuf, 0, sizeof(*header), GFP_KERNEL) < 0 ||
e52f99c9eea903 David Howells 2023-08-03 2485 ceph_bvecq_insert_frag(dbuf, 1, PAGE_SIZE, GFP_KERNEL) < 0)
5c64737d253683 Xiubo Li 2022-08-25 2486 goto out;
5c64737d253683 Xiubo Li 2022-08-25 2487
e52f99c9eea903 David Howells 2023-08-03 2488 iov_iter_bvec_queue(&iter, ITER_DEST, dbuf, 1, 0, len);
5c64737d253683 Xiubo Li 2022-08-25 2489
5c64737d253683 Xiubo Li 2022-08-25 2490 pos = orig_pos;
5c64737d253683 Xiubo Li 2022-08-25 2491 ret = __ceph_sync_read(inode, &pos, &iter, &retry_op, &objver);
5c64737d253683 Xiubo Li 2022-08-25 @2492 if (ret < 0)
5c64737d253683 Xiubo Li 2022-08-25 2493 goto out;
5c64737d253683 Xiubo Li 2022-08-25 2494
e52f99c9eea903 David Howells 2023-08-03 2495 header = kmap_local_bvecq(dbuf, 0);
e52f99c9eea903 David Howells 2023-08-03 2496
5c64737d253683 Xiubo Li 2022-08-25 2497 /* Insert the header first */
e52f99c9eea903 David Howells 2023-08-03 2498 header->ver = 1;
e52f99c9eea903 David Howells 2023-08-03 2499 header->compat = 1;
e52f99c9eea903 David Howells 2023-08-03 2500 header->change_attr = cpu_to_le64(inode_peek_iversion_raw(inode));
5c64737d253683 Xiubo Li 2022-08-25 2501
5c64737d253683 Xiubo Li 2022-08-25 2502 /*
5c64737d253683 Xiubo Li 2022-08-25 2503 * Always set the block_size to CEPH_FSCRYPT_BLOCK_SIZE,
5c64737d253683 Xiubo Li 2022-08-25 2504 * because in MDS it may need this to do the truncate.
5c64737d253683 Xiubo Li 2022-08-25 2505 */
e52f99c9eea903 David Howells 2023-08-03 2506 header->block_size = cpu_to_le32(CEPH_FSCRYPT_BLOCK_SIZE);
5c64737d253683 Xiubo Li 2022-08-25 2507
5c64737d253683 Xiubo Li 2022-08-25 2508 /*
5c64737d253683 Xiubo Li 2022-08-25 2509 * If we hit a hole here, we should just skip filling
5c64737d253683 Xiubo Li 2022-08-25 2510 * the fscrypt for the request, because once the fscrypt
5c64737d253683 Xiubo Li 2022-08-25 2511 * is enabled, the file will be split into many blocks
5c64737d253683 Xiubo Li 2022-08-25 2512 * with the size of CEPH_FSCRYPT_BLOCK_SIZE, if there
5c64737d253683 Xiubo Li 2022-08-25 2513 * has a hole, the hole size should be multiple of block
5c64737d253683 Xiubo Li 2022-08-25 2514 * size.
5c64737d253683 Xiubo Li 2022-08-25 2515 *
5c64737d253683 Xiubo Li 2022-08-25 2516 * If the Rados object doesn't exist, it will be set to 0.
5c64737d253683 Xiubo Li 2022-08-25 2517 */
5c64737d253683 Xiubo Li 2022-08-25 2518 if (!objver) {
38d46409c4639a Xiubo Li 2023-06-12 2519 doutc(cl, "hit hole, ppos %lld < size %lld\n", pos, i_size);
5c64737d253683 Xiubo Li 2022-08-25 2520
e52f99c9eea903 David Howells 2023-08-03 2521 header->data_len = cpu_to_le32(8 + 8 + 4);
e52f99c9eea903 David Howells 2023-08-03 2522 header->file_offset = 0;
5c64737d253683 Xiubo Li 2022-08-25 2523 ret = 0;
5c64737d253683 Xiubo Li 2022-08-25 2524 } else {
e52f99c9eea903 David Howells 2023-08-03 2525 header->data_len = cpu_to_le32(8 + 8 + 4 + CEPH_FSCRYPT_BLOCK_SIZE);
e52f99c9eea903 David Howells 2023-08-03 2526 header->file_offset = cpu_to_le64(orig_pos);
5c64737d253683 Xiubo Li 2022-08-25 2527
38d46409c4639a Xiubo Li 2023-06-12 2528 doutc(cl, "encrypt block boff/bsize %d/%lu\n", boff,
38d46409c4639a Xiubo Li 2023-06-12 2529 CEPH_FSCRYPT_BLOCK_SIZE);
295fc4aa7de4b7 Xiubo Li 2023-03-06 2530
5c64737d253683 Xiubo Li 2022-08-25 2531 /* truncate and zero out the extra contents for the last block */
e52f99c9eea903 David Howells 2023-08-03 2532 p = kmap_local_bvecq(dbuf, 1);
e52f99c9eea903 David Howells 2023-08-03 2533 memset(p + boff, 0, PAGE_SIZE - boff);
e52f99c9eea903 David Howells 2023-08-03 2534 kunmap_local(p);
5c64737d253683 Xiubo Li 2022-08-25 2535
5c64737d253683 Xiubo Li 2022-08-25 2536 /* encrypt the last block */
e52f99c9eea903 David Howells 2023-08-03 2537 ret = ceph_fscrypt_encrypt_block_inplace(inode, dbuf->bv[0].bv_page,
5c64737d253683 Xiubo Li 2022-08-25 2538 CEPH_FSCRYPT_BLOCK_SIZE,
fa65058063cbab Eric Biggers 2025-07-09 2539 0, block);
5c64737d253683 Xiubo Li 2022-08-25 2540 if (ret)
5c64737d253683 Xiubo Li 2022-08-25 2541 goto out;
5c64737d253683 Xiubo Li 2022-08-25 2542 }
5c64737d253683 Xiubo Li 2022-08-25 2543
e52f99c9eea903 David Howells 2023-08-03 2544 req->r_dbuf = dbuf;
e52f99c9eea903 David Howells 2023-08-03 2545 req->r_dbuf_len = sizeof(*header);
e52f99c9eea903 David Howells 2023-08-03 2546 if (header->block_size)
e52f99c9eea903 David Howells 2023-08-03 2547 req->r_dbuf_len += CEPH_FSCRYPT_BLOCK_SIZE;
5c64737d253683 Xiubo Li 2022-08-25 2548 out:
38d46409c4639a Xiubo Li 2023-06-12 2549 doutc(cl, "%p %llx.%llx size dropping cap refs on %s\n", inode,
38d46409c4639a Xiubo Li 2023-06-12 2550 ceph_vinop(inode), ceph_cap_string(got));
5c64737d253683 Xiubo Li 2022-08-25 2551 ceph_put_cap_refs(ci, got);
e52f99c9eea903 David Howells 2023-08-03 2552 kunmap_local(header);
e52f99c9eea903 David Howells 2023-08-03 2553 if (ret)
e52f99c9eea903 David Howells 2023-08-03 2554 bvecq_put(dbuf);
5c64737d253683 Xiubo Li 2022-08-25 2555 return ret;
5c64737d253683 Xiubo Li 2022-08-25 2556 }
5c64737d253683 Xiubo Li 2022-08-25 2557
:::::: The code at line 2492 was first introduced by commit
:::::: 5c64737d253683b7d138dde0da513a9ade16a170 ceph: add truncate size handling support for fscrypt
:::::: TO: Xiubo Li <xiubli@redhat.com>
:::::: CC: Ilya Dryomov <idryomov@gmail.com>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2026-09-04 23:43 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 23:42 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-09-05 1:01 [dhowells-fs:ceph-iter 52/87] fs/ceph/inode.c:2492:6: warning: variable 'header' is used uninitialized whenever 'if' condition is true kernel test robot
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=202609050154.osd6wrTN-lkp@intel.com \
--to=lkp@intel.com \
--cc=dhowells@redhat.com \
--cc=oe-kbuild-all@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.