* fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this memory at line 460 (fwd)
@ 2026-11-06 10:22 Julia Lawall
2026-11-06 11:16 ` Namjae Jeon
0 siblings, 1 reply; 2+ messages in thread
From: Julia Lawall @ 2026-11-06 10:22 UTC (permalink / raw)
To: Namjae Jeon
Cc: oe-kbuild-all, linux-kernel, Amir Goldstein, Christoph Hellwig
---------- Forwarded message ----------
Date: Fri, 06 Nov 2026 07:59:12 +0100
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Julia Lawall <julia.lawall@inria.fr>
Subject: fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this
memory at line 460
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Namjae Jeon <linkinjeon@kernel.org>
CC: Amir Goldstein <amir73il@gmail.com>
CC: Christoph Hellwig <hch@lst.de>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: f66469d9905b39d2c260a15d7d6db450f4db67c1
commit: 47503f989736d6c4c9f8bfca1c28d267473ccd4b ntfs: add Kconfig and Makefile
date: 9 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 9 months ago
config: loongarch-randconfig-r2105-20261104 (https://download.01.org/0day-ci/archive/20261106/202611060717.0Na5FqQR-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project e2e3d6c39cfebec9eace23629a5a103df2c79ba6)
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
| Fixes: 47503f989736 ("ntfs: add Kconfig and Makefile")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202611060717.0Na5FqQR-lkp@intel.com/
cocci warnings: (new ones prefixed by >>)
>> fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this memory at line 460
vim +481 fs/ntfs/iomap.c
b041ca562526b3c Namjae Jeon 2026-02-13 378
b041ca562526b3c Namjae Jeon 2026-02-13 379 static int ntfs_write_simple_iomap_begin_non_resident(struct inode *inode, loff_t offset,
b041ca562526b3c Namjae Jeon 2026-02-13 380 loff_t length, struct iomap *iomap)
b041ca562526b3c Namjae Jeon 2026-02-13 381 {
b041ca562526b3c Namjae Jeon 2026-02-13 382 struct ntfs_inode *ni = NTFS_I(inode);
b041ca562526b3c Namjae Jeon 2026-02-13 383 struct ntfs_volume *vol = ni->vol;
b041ca562526b3c Namjae Jeon 2026-02-13 384 loff_t vcn_ofs, rl_length;
b041ca562526b3c Namjae Jeon 2026-02-13 385 struct runlist_element *rl, *rlc;
b041ca562526b3c Namjae Jeon 2026-02-13 386 bool is_retry = false;
b041ca562526b3c Namjae Jeon 2026-02-13 387 int err;
b041ca562526b3c Namjae Jeon 2026-02-13 388 s64 vcn, lcn;
b041ca562526b3c Namjae Jeon 2026-02-13 389 s64 max_clu_count =
b041ca562526b3c Namjae Jeon 2026-02-13 390 ntfs_bytes_to_cluster(vol, round_up(length, vol->cluster_size));
b041ca562526b3c Namjae Jeon 2026-02-13 391
b041ca562526b3c Namjae Jeon 2026-02-13 392 vcn = ntfs_bytes_to_cluster(vol, offset);
b041ca562526b3c Namjae Jeon 2026-02-13 393 vcn_ofs = ntfs_bytes_to_cluster_off(vol, offset);
b041ca562526b3c Namjae Jeon 2026-02-13 394
b041ca562526b3c Namjae Jeon 2026-02-13 395 down_read(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 396 rl = ni->runlist.rl;
b041ca562526b3c Namjae Jeon 2026-02-13 397 if (!rl) {
b041ca562526b3c Namjae Jeon 2026-02-13 398 up_read(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 399 err = ntfs_map_runlist(ni, vcn);
b041ca562526b3c Namjae Jeon 2026-02-13 400 if (err) {
b041ca562526b3c Namjae Jeon 2026-02-13 401 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 402 return -ENOENT;
b041ca562526b3c Namjae Jeon 2026-02-13 403 }
b041ca562526b3c Namjae Jeon 2026-02-13 404 down_read(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 405 rl = ni->runlist.rl;
b041ca562526b3c Namjae Jeon 2026-02-13 406 }
b041ca562526b3c Namjae Jeon 2026-02-13 407 up_read(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 408
b041ca562526b3c Namjae Jeon 2026-02-13 409 down_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 410 remap_rl:
b041ca562526b3c Namjae Jeon 2026-02-13 411 /* Seek to element containing target vcn. */
b041ca562526b3c Namjae Jeon 2026-02-13 412 rl = __ntfs_attr_find_vcn_nolock(&ni->runlist, vcn);
b041ca562526b3c Namjae Jeon 2026-02-13 413 if (IS_ERR(rl)) {
b041ca562526b3c Namjae Jeon 2026-02-13 414 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 415 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 416 return -EIO;
b041ca562526b3c Namjae Jeon 2026-02-13 417 }
b041ca562526b3c Namjae Jeon 2026-02-13 418 lcn = ntfs_rl_vcn_to_lcn(rl, vcn);
b041ca562526b3c Namjae Jeon 2026-02-13 419
b041ca562526b3c Namjae Jeon 2026-02-13 420 if (lcn <= LCN_RL_NOT_MAPPED && is_retry == false) {
b041ca562526b3c Namjae Jeon 2026-02-13 421 is_retry = true;
b041ca562526b3c Namjae Jeon 2026-02-13 422 if (!ntfs_map_runlist_nolock(ni, vcn, NULL)) {
b041ca562526b3c Namjae Jeon 2026-02-13 423 rl = ni->runlist.rl;
b041ca562526b3c Namjae Jeon 2026-02-13 424 goto remap_rl;
b041ca562526b3c Namjae Jeon 2026-02-13 425 }
b041ca562526b3c Namjae Jeon 2026-02-13 426 }
b041ca562526b3c Namjae Jeon 2026-02-13 427
b041ca562526b3c Namjae Jeon 2026-02-13 428 max_clu_count = min(max_clu_count, rl->length - (vcn - rl->vcn));
b041ca562526b3c Namjae Jeon 2026-02-13 429 if (max_clu_count == 0) {
b041ca562526b3c Namjae Jeon 2026-02-13 430 ntfs_error(inode->i_sb,
b041ca562526b3c Namjae Jeon 2026-02-13 431 "runlist(vcn : %lld, length : %lld) is corrupted\n",
b041ca562526b3c Namjae Jeon 2026-02-13 432 rl->vcn, rl->length);
b041ca562526b3c Namjae Jeon 2026-02-13 433 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 434 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 435 return -EIO;
b041ca562526b3c Namjae Jeon 2026-02-13 436 }
b041ca562526b3c Namjae Jeon 2026-02-13 437
b041ca562526b3c Namjae Jeon 2026-02-13 438 iomap->bdev = inode->i_sb->s_bdev;
b041ca562526b3c Namjae Jeon 2026-02-13 439 iomap->offset = offset;
b041ca562526b3c Namjae Jeon 2026-02-13 440
b041ca562526b3c Namjae Jeon 2026-02-13 441 if (lcn <= LCN_DELALLOC) {
b041ca562526b3c Namjae Jeon 2026-02-13 442 if (lcn < LCN_DELALLOC) {
b041ca562526b3c Namjae Jeon 2026-02-13 443 max_clu_count =
b041ca562526b3c Namjae Jeon 2026-02-13 444 ntfs_available_clusters_count(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 445 if (max_clu_count < 0) {
b041ca562526b3c Namjae Jeon 2026-02-13 446 err = max_clu_count;
b041ca562526b3c Namjae Jeon 2026-02-13 447 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 448 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 449 return err;
b041ca562526b3c Namjae Jeon 2026-02-13 450 }
b041ca562526b3c Namjae Jeon 2026-02-13 451 }
b041ca562526b3c Namjae Jeon 2026-02-13 452
b041ca562526b3c Namjae Jeon 2026-02-13 453 iomap->type = IOMAP_DELALLOC;
b041ca562526b3c Namjae Jeon 2026-02-13 454 iomap->addr = IOMAP_NULL_ADDR;
b041ca562526b3c Namjae Jeon 2026-02-13 455
b041ca562526b3c Namjae Jeon 2026-02-13 456 if (lcn <= LCN_HOLE) {
b041ca562526b3c Namjae Jeon 2026-02-13 457 size_t new_rl_count;
b041ca562526b3c Namjae Jeon 2026-02-13 458
b041ca562526b3c Namjae Jeon 2026-02-13 459 rlc = kmalloc(sizeof(struct runlist_element) * 2,
b041ca562526b3c Namjae Jeon 2026-02-13 @460 GFP_NOFS);
b041ca562526b3c Namjae Jeon 2026-02-13 461 if (!rlc) {
b041ca562526b3c Namjae Jeon 2026-02-13 462 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 463 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 464 return -ENOMEM;
b041ca562526b3c Namjae Jeon 2026-02-13 465 }
b041ca562526b3c Namjae Jeon 2026-02-13 466
b041ca562526b3c Namjae Jeon 2026-02-13 467 rlc->vcn = vcn;
b041ca562526b3c Namjae Jeon 2026-02-13 468 rlc->lcn = LCN_DELALLOC;
b041ca562526b3c Namjae Jeon 2026-02-13 469 rlc->length = max_clu_count;
b041ca562526b3c Namjae Jeon 2026-02-13 470
b041ca562526b3c Namjae Jeon 2026-02-13 471 rlc[1].vcn = vcn + max_clu_count;
b041ca562526b3c Namjae Jeon 2026-02-13 472 rlc[1].lcn = LCN_RL_NOT_MAPPED;
b041ca562526b3c Namjae Jeon 2026-02-13 473 rlc[1].length = 0;
b041ca562526b3c Namjae Jeon 2026-02-13 474
b041ca562526b3c Namjae Jeon 2026-02-13 475 rl = ntfs_runlists_merge(&ni->runlist, rlc, 0,
b041ca562526b3c Namjae Jeon 2026-02-13 476 &new_rl_count);
b041ca562526b3c Namjae Jeon 2026-02-13 477 if (IS_ERR(rl)) {
b041ca562526b3c Namjae Jeon 2026-02-13 478 ntfs_error(vol->sb, "Failed to merge runlists");
b041ca562526b3c Namjae Jeon 2026-02-13 479 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 480 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 @481 kvfree(rlc);
b041ca562526b3c Namjae Jeon 2026-02-13 482 return PTR_ERR(rl);
b041ca562526b3c Namjae Jeon 2026-02-13 483 }
b041ca562526b3c Namjae Jeon 2026-02-13 484
b041ca562526b3c Namjae Jeon 2026-02-13 485 ni->runlist.rl = rl;
b041ca562526b3c Namjae Jeon 2026-02-13 486 ni->runlist.count = new_rl_count;
b041ca562526b3c Namjae Jeon 2026-02-13 487 ni->i_dealloc_clusters += max_clu_count;
b041ca562526b3c Namjae Jeon 2026-02-13 488 }
b041ca562526b3c Namjae Jeon 2026-02-13 489 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 490 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 491
b041ca562526b3c Namjae Jeon 2026-02-13 492 if (lcn < LCN_DELALLOC)
b041ca562526b3c Namjae Jeon 2026-02-13 493 ntfs_hold_dirty_clusters(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 494
b041ca562526b3c Namjae Jeon 2026-02-13 495 rl_length = ntfs_cluster_to_bytes(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 496 if (length > rl_length - vcn_ofs)
b041ca562526b3c Namjae Jeon 2026-02-13 497 iomap->length = rl_length - vcn_ofs;
b041ca562526b3c Namjae Jeon 2026-02-13 498 else
b041ca562526b3c Namjae Jeon 2026-02-13 499 iomap->length = length;
b041ca562526b3c Namjae Jeon 2026-02-13 500
b041ca562526b3c Namjae Jeon 2026-02-13 501 iomap->flags = IOMAP_F_NEW;
b041ca562526b3c Namjae Jeon 2026-02-13 502 if (lcn <= LCN_HOLE) {
b041ca562526b3c Namjae Jeon 2026-02-13 503 loff_t end = offset + length;
b041ca562526b3c Namjae Jeon 2026-02-13 504
b041ca562526b3c Namjae Jeon 2026-02-13 505 if (vcn_ofs || ((vol->cluster_size > iomap->length) &&
b041ca562526b3c Namjae Jeon 2026-02-13 506 end < ni->initialized_size)) {
b041ca562526b3c Namjae Jeon 2026-02-13 507 loff_t z_start, z_end;
b041ca562526b3c Namjae Jeon 2026-02-13 508
b041ca562526b3c Namjae Jeon 2026-02-13 509 z_start = vcn << vol->cluster_size_bits;
b041ca562526b3c Namjae Jeon 2026-02-13 510 z_end = min_t(loff_t, z_start + vol->cluster_size,
b041ca562526b3c Namjae Jeon 2026-02-13 511 i_size_read(inode));
b041ca562526b3c Namjae Jeon 2026-02-13 512 if (z_end > z_start)
b041ca562526b3c Namjae Jeon 2026-02-13 513 err = ntfs_zero_range(inode,
b041ca562526b3c Namjae Jeon 2026-02-13 514 z_start,
b041ca562526b3c Namjae Jeon 2026-02-13 515 z_end - z_start);
b041ca562526b3c Namjae Jeon 2026-02-13 516 }
b041ca562526b3c Namjae Jeon 2026-02-13 517 if ((!err || err == -EPERM) &&
b041ca562526b3c Namjae Jeon 2026-02-13 518 max_clu_count > 1 &&
b041ca562526b3c Namjae Jeon 2026-02-13 519 (iomap->length & vol->cluster_size_mask &&
b041ca562526b3c Namjae Jeon 2026-02-13 520 end < ni->initialized_size)) {
b041ca562526b3c Namjae Jeon 2026-02-13 521 loff_t z_start, z_end;
b041ca562526b3c Namjae Jeon 2026-02-13 522
b041ca562526b3c Namjae Jeon 2026-02-13 523 z_start = (vcn + max_clu_count - 1) <<
b041ca562526b3c Namjae Jeon 2026-02-13 524 vol->cluster_size_bits;
b041ca562526b3c Namjae Jeon 2026-02-13 525 z_end = min_t(loff_t, z_start + vol->cluster_size,
b041ca562526b3c Namjae Jeon 2026-02-13 526 i_size_read(inode));
b041ca562526b3c Namjae Jeon 2026-02-13 527 if (z_end > z_start)
b041ca562526b3c Namjae Jeon 2026-02-13 528 err = ntfs_zero_range(inode,
b041ca562526b3c Namjae Jeon 2026-02-13 529 z_start,
b041ca562526b3c Namjae Jeon 2026-02-13 530 z_end - z_start);
b041ca562526b3c Namjae Jeon 2026-02-13 531 }
b041ca562526b3c Namjae Jeon 2026-02-13 532
b041ca562526b3c Namjae Jeon 2026-02-13 533 if (err == -EPERM)
b041ca562526b3c Namjae Jeon 2026-02-13 534 err = 0;
b041ca562526b3c Namjae Jeon 2026-02-13 535 if (err) {
b041ca562526b3c Namjae Jeon 2026-02-13 536 ntfs_release_dirty_clusters(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 537 return err;
b041ca562526b3c Namjae Jeon 2026-02-13 538 }
b041ca562526b3c Namjae Jeon 2026-02-13 539 }
b041ca562526b3c Namjae Jeon 2026-02-13 540 } else {
b041ca562526b3c Namjae Jeon 2026-02-13 541 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 542 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 543
b041ca562526b3c Namjae Jeon 2026-02-13 544 iomap->type = IOMAP_MAPPED;
b041ca562526b3c Namjae Jeon 2026-02-13 545 iomap->addr = ntfs_cluster_to_bytes(vol, lcn) + vcn_ofs;
b041ca562526b3c Namjae Jeon 2026-02-13 546
b041ca562526b3c Namjae Jeon 2026-02-13 547 rl_length = ntfs_cluster_to_bytes(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 548 if (length > rl_length - vcn_ofs)
b041ca562526b3c Namjae Jeon 2026-02-13 549 iomap->length = rl_length - vcn_ofs;
b041ca562526b3c Namjae Jeon 2026-02-13 550 else
b041ca562526b3c Namjae Jeon 2026-02-13 551 iomap->length = length;
b041ca562526b3c Namjae Jeon 2026-02-13 552 }
b041ca562526b3c Namjae Jeon 2026-02-13 553
b041ca562526b3c Namjae Jeon 2026-02-13 554 return 0;
b041ca562526b3c Namjae Jeon 2026-02-13 555 }
b041ca562526b3c Namjae Jeon 2026-02-13 556
:::::: The code at line 481 was first introduced by commit
:::::: b041ca562526b3c4a71b41b80ba5e520eac636ad ntfs: update iomap and address space operations
:::::: TO: Namjae Jeon <linkinjeon@kernel.org>
:::::: CC: Namjae Jeon <linkinjeon@kernel.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this memory at line 460 (fwd)
2026-11-06 10:22 fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this memory at line 460 (fwd) Julia Lawall
@ 2026-11-06 11:16 ` Namjae Jeon
0 siblings, 0 replies; 2+ messages in thread
From: Namjae Jeon @ 2026-11-06 11:16 UTC (permalink / raw)
To: Julia Lawall
Cc: oe-kbuild-all, linux-kernel, Amir Goldstein, Christoph Hellwig
I will check it.
Thanks for forwarding this to me!
On Fri, Nov 6, 2026 at 7:23 PM Julia Lawall <julia.lawall@inria.fr> wrote:
>
> ---------- Forwarded message ----------
> Date: Fri, 06 Nov 2026 07:59:12 +0100
> From: kernel test robot <lkp@intel.com>
> To: oe-kbuild@lists.linux.dev
> Cc: lkp@intel.com, Julia Lawall <julia.lawall@inria.fr>
> Subject: fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this
> memory at line 460
>
> BCC: lkp@intel.com
> CC: oe-kbuild-all@lists.linux.dev
> CC: linux-kernel@vger.kernel.org
> TO: Namjae Jeon <linkinjeon@kernel.org>
> CC: Amir Goldstein <amir73il@gmail.com>
> CC: Christoph Hellwig <hch@lst.de>
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: f66469d9905b39d2c260a15d7d6db450f4db67c1
> commit: 47503f989736d6c4c9f8bfca1c28d267473ccd4b ntfs: add Kconfig and Makefile
> date: 9 months ago
> :::::: branch date: 5 hours ago
> :::::: commit date: 9 months ago
> config: loongarch-randconfig-r2105-20261104 (https://download.01.org/0day-ci/archive/20261106/202611060717.0Na5FqQR-lkp@intel.com/config)
> compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project e2e3d6c39cfebec9eace23629a5a103df2c79ba6)
>
> 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
> | Fixes: 47503f989736 ("ntfs: add Kconfig and Makefile")
> | Reported-by: kernel test robot <lkp@intel.com>
> | Reported-by: Julia Lawall <julia.lawall@inria.fr>
> | Closes: https://lore.kernel.org/r/202611060717.0Na5FqQR-lkp@intel.com/
>
> cocci warnings: (new ones prefixed by >>)
> >> fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this memory at line 460
>
> vim +481 fs/ntfs/iomap.c
>
> b041ca562526b3c Namjae Jeon 2026-02-13 378
> b041ca562526b3c Namjae Jeon 2026-02-13 379 static int ntfs_write_simple_iomap_begin_non_resident(struct inode *inode, loff_t offset,
> b041ca562526b3c Namjae Jeon 2026-02-13 380 loff_t length, struct iomap *iomap)
> b041ca562526b3c Namjae Jeon 2026-02-13 381 {
> b041ca562526b3c Namjae Jeon 2026-02-13 382 struct ntfs_inode *ni = NTFS_I(inode);
> b041ca562526b3c Namjae Jeon 2026-02-13 383 struct ntfs_volume *vol = ni->vol;
> b041ca562526b3c Namjae Jeon 2026-02-13 384 loff_t vcn_ofs, rl_length;
> b041ca562526b3c Namjae Jeon 2026-02-13 385 struct runlist_element *rl, *rlc;
> b041ca562526b3c Namjae Jeon 2026-02-13 386 bool is_retry = false;
> b041ca562526b3c Namjae Jeon 2026-02-13 387 int err;
> b041ca562526b3c Namjae Jeon 2026-02-13 388 s64 vcn, lcn;
> b041ca562526b3c Namjae Jeon 2026-02-13 389 s64 max_clu_count =
> b041ca562526b3c Namjae Jeon 2026-02-13 390 ntfs_bytes_to_cluster(vol, round_up(length, vol->cluster_size));
> b041ca562526b3c Namjae Jeon 2026-02-13 391
> b041ca562526b3c Namjae Jeon 2026-02-13 392 vcn = ntfs_bytes_to_cluster(vol, offset);
> b041ca562526b3c Namjae Jeon 2026-02-13 393 vcn_ofs = ntfs_bytes_to_cluster_off(vol, offset);
> b041ca562526b3c Namjae Jeon 2026-02-13 394
> b041ca562526b3c Namjae Jeon 2026-02-13 395 down_read(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 396 rl = ni->runlist.rl;
> b041ca562526b3c Namjae Jeon 2026-02-13 397 if (!rl) {
> b041ca562526b3c Namjae Jeon 2026-02-13 398 up_read(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 399 err = ntfs_map_runlist(ni, vcn);
> b041ca562526b3c Namjae Jeon 2026-02-13 400 if (err) {
> b041ca562526b3c Namjae Jeon 2026-02-13 401 mutex_unlock(&ni->mrec_lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 402 return -ENOENT;
> b041ca562526b3c Namjae Jeon 2026-02-13 403 }
> b041ca562526b3c Namjae Jeon 2026-02-13 404 down_read(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 405 rl = ni->runlist.rl;
> b041ca562526b3c Namjae Jeon 2026-02-13 406 }
> b041ca562526b3c Namjae Jeon 2026-02-13 407 up_read(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 408
> b041ca562526b3c Namjae Jeon 2026-02-13 409 down_write(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 410 remap_rl:
> b041ca562526b3c Namjae Jeon 2026-02-13 411 /* Seek to element containing target vcn. */
> b041ca562526b3c Namjae Jeon 2026-02-13 412 rl = __ntfs_attr_find_vcn_nolock(&ni->runlist, vcn);
> b041ca562526b3c Namjae Jeon 2026-02-13 413 if (IS_ERR(rl)) {
> b041ca562526b3c Namjae Jeon 2026-02-13 414 up_write(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 415 mutex_unlock(&ni->mrec_lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 416 return -EIO;
> b041ca562526b3c Namjae Jeon 2026-02-13 417 }
> b041ca562526b3c Namjae Jeon 2026-02-13 418 lcn = ntfs_rl_vcn_to_lcn(rl, vcn);
> b041ca562526b3c Namjae Jeon 2026-02-13 419
> b041ca562526b3c Namjae Jeon 2026-02-13 420 if (lcn <= LCN_RL_NOT_MAPPED && is_retry == false) {
> b041ca562526b3c Namjae Jeon 2026-02-13 421 is_retry = true;
> b041ca562526b3c Namjae Jeon 2026-02-13 422 if (!ntfs_map_runlist_nolock(ni, vcn, NULL)) {
> b041ca562526b3c Namjae Jeon 2026-02-13 423 rl = ni->runlist.rl;
> b041ca562526b3c Namjae Jeon 2026-02-13 424 goto remap_rl;
> b041ca562526b3c Namjae Jeon 2026-02-13 425 }
> b041ca562526b3c Namjae Jeon 2026-02-13 426 }
> b041ca562526b3c Namjae Jeon 2026-02-13 427
> b041ca562526b3c Namjae Jeon 2026-02-13 428 max_clu_count = min(max_clu_count, rl->length - (vcn - rl->vcn));
> b041ca562526b3c Namjae Jeon 2026-02-13 429 if (max_clu_count == 0) {
> b041ca562526b3c Namjae Jeon 2026-02-13 430 ntfs_error(inode->i_sb,
> b041ca562526b3c Namjae Jeon 2026-02-13 431 "runlist(vcn : %lld, length : %lld) is corrupted\n",
> b041ca562526b3c Namjae Jeon 2026-02-13 432 rl->vcn, rl->length);
> b041ca562526b3c Namjae Jeon 2026-02-13 433 up_write(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 434 mutex_unlock(&ni->mrec_lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 435 return -EIO;
> b041ca562526b3c Namjae Jeon 2026-02-13 436 }
> b041ca562526b3c Namjae Jeon 2026-02-13 437
> b041ca562526b3c Namjae Jeon 2026-02-13 438 iomap->bdev = inode->i_sb->s_bdev;
> b041ca562526b3c Namjae Jeon 2026-02-13 439 iomap->offset = offset;
> b041ca562526b3c Namjae Jeon 2026-02-13 440
> b041ca562526b3c Namjae Jeon 2026-02-13 441 if (lcn <= LCN_DELALLOC) {
> b041ca562526b3c Namjae Jeon 2026-02-13 442 if (lcn < LCN_DELALLOC) {
> b041ca562526b3c Namjae Jeon 2026-02-13 443 max_clu_count =
> b041ca562526b3c Namjae Jeon 2026-02-13 444 ntfs_available_clusters_count(vol, max_clu_count);
> b041ca562526b3c Namjae Jeon 2026-02-13 445 if (max_clu_count < 0) {
> b041ca562526b3c Namjae Jeon 2026-02-13 446 err = max_clu_count;
> b041ca562526b3c Namjae Jeon 2026-02-13 447 up_write(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 448 mutex_unlock(&ni->mrec_lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 449 return err;
> b041ca562526b3c Namjae Jeon 2026-02-13 450 }
> b041ca562526b3c Namjae Jeon 2026-02-13 451 }
> b041ca562526b3c Namjae Jeon 2026-02-13 452
> b041ca562526b3c Namjae Jeon 2026-02-13 453 iomap->type = IOMAP_DELALLOC;
> b041ca562526b3c Namjae Jeon 2026-02-13 454 iomap->addr = IOMAP_NULL_ADDR;
> b041ca562526b3c Namjae Jeon 2026-02-13 455
> b041ca562526b3c Namjae Jeon 2026-02-13 456 if (lcn <= LCN_HOLE) {
> b041ca562526b3c Namjae Jeon 2026-02-13 457 size_t new_rl_count;
> b041ca562526b3c Namjae Jeon 2026-02-13 458
> b041ca562526b3c Namjae Jeon 2026-02-13 459 rlc = kmalloc(sizeof(struct runlist_element) * 2,
> b041ca562526b3c Namjae Jeon 2026-02-13 @460 GFP_NOFS);
> b041ca562526b3c Namjae Jeon 2026-02-13 461 if (!rlc) {
> b041ca562526b3c Namjae Jeon 2026-02-13 462 up_write(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 463 mutex_unlock(&ni->mrec_lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 464 return -ENOMEM;
> b041ca562526b3c Namjae Jeon 2026-02-13 465 }
> b041ca562526b3c Namjae Jeon 2026-02-13 466
> b041ca562526b3c Namjae Jeon 2026-02-13 467 rlc->vcn = vcn;
> b041ca562526b3c Namjae Jeon 2026-02-13 468 rlc->lcn = LCN_DELALLOC;
> b041ca562526b3c Namjae Jeon 2026-02-13 469 rlc->length = max_clu_count;
> b041ca562526b3c Namjae Jeon 2026-02-13 470
> b041ca562526b3c Namjae Jeon 2026-02-13 471 rlc[1].vcn = vcn + max_clu_count;
> b041ca562526b3c Namjae Jeon 2026-02-13 472 rlc[1].lcn = LCN_RL_NOT_MAPPED;
> b041ca562526b3c Namjae Jeon 2026-02-13 473 rlc[1].length = 0;
> b041ca562526b3c Namjae Jeon 2026-02-13 474
> b041ca562526b3c Namjae Jeon 2026-02-13 475 rl = ntfs_runlists_merge(&ni->runlist, rlc, 0,
> b041ca562526b3c Namjae Jeon 2026-02-13 476 &new_rl_count);
> b041ca562526b3c Namjae Jeon 2026-02-13 477 if (IS_ERR(rl)) {
> b041ca562526b3c Namjae Jeon 2026-02-13 478 ntfs_error(vol->sb, "Failed to merge runlists");
> b041ca562526b3c Namjae Jeon 2026-02-13 479 up_write(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 480 mutex_unlock(&ni->mrec_lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 @481 kvfree(rlc);
> b041ca562526b3c Namjae Jeon 2026-02-13 482 return PTR_ERR(rl);
> b041ca562526b3c Namjae Jeon 2026-02-13 483 }
> b041ca562526b3c Namjae Jeon 2026-02-13 484
> b041ca562526b3c Namjae Jeon 2026-02-13 485 ni->runlist.rl = rl;
> b041ca562526b3c Namjae Jeon 2026-02-13 486 ni->runlist.count = new_rl_count;
> b041ca562526b3c Namjae Jeon 2026-02-13 487 ni->i_dealloc_clusters += max_clu_count;
> b041ca562526b3c Namjae Jeon 2026-02-13 488 }
> b041ca562526b3c Namjae Jeon 2026-02-13 489 up_write(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 490 mutex_unlock(&ni->mrec_lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 491
> b041ca562526b3c Namjae Jeon 2026-02-13 492 if (lcn < LCN_DELALLOC)
> b041ca562526b3c Namjae Jeon 2026-02-13 493 ntfs_hold_dirty_clusters(vol, max_clu_count);
> b041ca562526b3c Namjae Jeon 2026-02-13 494
> b041ca562526b3c Namjae Jeon 2026-02-13 495 rl_length = ntfs_cluster_to_bytes(vol, max_clu_count);
> b041ca562526b3c Namjae Jeon 2026-02-13 496 if (length > rl_length - vcn_ofs)
> b041ca562526b3c Namjae Jeon 2026-02-13 497 iomap->length = rl_length - vcn_ofs;
> b041ca562526b3c Namjae Jeon 2026-02-13 498 else
> b041ca562526b3c Namjae Jeon 2026-02-13 499 iomap->length = length;
> b041ca562526b3c Namjae Jeon 2026-02-13 500
> b041ca562526b3c Namjae Jeon 2026-02-13 501 iomap->flags = IOMAP_F_NEW;
> b041ca562526b3c Namjae Jeon 2026-02-13 502 if (lcn <= LCN_HOLE) {
> b041ca562526b3c Namjae Jeon 2026-02-13 503 loff_t end = offset + length;
> b041ca562526b3c Namjae Jeon 2026-02-13 504
> b041ca562526b3c Namjae Jeon 2026-02-13 505 if (vcn_ofs || ((vol->cluster_size > iomap->length) &&
> b041ca562526b3c Namjae Jeon 2026-02-13 506 end < ni->initialized_size)) {
> b041ca562526b3c Namjae Jeon 2026-02-13 507 loff_t z_start, z_end;
> b041ca562526b3c Namjae Jeon 2026-02-13 508
> b041ca562526b3c Namjae Jeon 2026-02-13 509 z_start = vcn << vol->cluster_size_bits;
> b041ca562526b3c Namjae Jeon 2026-02-13 510 z_end = min_t(loff_t, z_start + vol->cluster_size,
> b041ca562526b3c Namjae Jeon 2026-02-13 511 i_size_read(inode));
> b041ca562526b3c Namjae Jeon 2026-02-13 512 if (z_end > z_start)
> b041ca562526b3c Namjae Jeon 2026-02-13 513 err = ntfs_zero_range(inode,
> b041ca562526b3c Namjae Jeon 2026-02-13 514 z_start,
> b041ca562526b3c Namjae Jeon 2026-02-13 515 z_end - z_start);
> b041ca562526b3c Namjae Jeon 2026-02-13 516 }
> b041ca562526b3c Namjae Jeon 2026-02-13 517 if ((!err || err == -EPERM) &&
> b041ca562526b3c Namjae Jeon 2026-02-13 518 max_clu_count > 1 &&
> b041ca562526b3c Namjae Jeon 2026-02-13 519 (iomap->length & vol->cluster_size_mask &&
> b041ca562526b3c Namjae Jeon 2026-02-13 520 end < ni->initialized_size)) {
> b041ca562526b3c Namjae Jeon 2026-02-13 521 loff_t z_start, z_end;
> b041ca562526b3c Namjae Jeon 2026-02-13 522
> b041ca562526b3c Namjae Jeon 2026-02-13 523 z_start = (vcn + max_clu_count - 1) <<
> b041ca562526b3c Namjae Jeon 2026-02-13 524 vol->cluster_size_bits;
> b041ca562526b3c Namjae Jeon 2026-02-13 525 z_end = min_t(loff_t, z_start + vol->cluster_size,
> b041ca562526b3c Namjae Jeon 2026-02-13 526 i_size_read(inode));
> b041ca562526b3c Namjae Jeon 2026-02-13 527 if (z_end > z_start)
> b041ca562526b3c Namjae Jeon 2026-02-13 528 err = ntfs_zero_range(inode,
> b041ca562526b3c Namjae Jeon 2026-02-13 529 z_start,
> b041ca562526b3c Namjae Jeon 2026-02-13 530 z_end - z_start);
> b041ca562526b3c Namjae Jeon 2026-02-13 531 }
> b041ca562526b3c Namjae Jeon 2026-02-13 532
> b041ca562526b3c Namjae Jeon 2026-02-13 533 if (err == -EPERM)
> b041ca562526b3c Namjae Jeon 2026-02-13 534 err = 0;
> b041ca562526b3c Namjae Jeon 2026-02-13 535 if (err) {
> b041ca562526b3c Namjae Jeon 2026-02-13 536 ntfs_release_dirty_clusters(vol, max_clu_count);
> b041ca562526b3c Namjae Jeon 2026-02-13 537 return err;
> b041ca562526b3c Namjae Jeon 2026-02-13 538 }
> b041ca562526b3c Namjae Jeon 2026-02-13 539 }
> b041ca562526b3c Namjae Jeon 2026-02-13 540 } else {
> b041ca562526b3c Namjae Jeon 2026-02-13 541 up_write(&ni->runlist.lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 542 mutex_unlock(&ni->mrec_lock);
> b041ca562526b3c Namjae Jeon 2026-02-13 543
> b041ca562526b3c Namjae Jeon 2026-02-13 544 iomap->type = IOMAP_MAPPED;
> b041ca562526b3c Namjae Jeon 2026-02-13 545 iomap->addr = ntfs_cluster_to_bytes(vol, lcn) + vcn_ofs;
> b041ca562526b3c Namjae Jeon 2026-02-13 546
> b041ca562526b3c Namjae Jeon 2026-02-13 547 rl_length = ntfs_cluster_to_bytes(vol, max_clu_count);
> b041ca562526b3c Namjae Jeon 2026-02-13 548 if (length > rl_length - vcn_ofs)
> b041ca562526b3c Namjae Jeon 2026-02-13 549 iomap->length = rl_length - vcn_ofs;
> b041ca562526b3c Namjae Jeon 2026-02-13 550 else
> b041ca562526b3c Namjae Jeon 2026-02-13 551 iomap->length = length;
> b041ca562526b3c Namjae Jeon 2026-02-13 552 }
> b041ca562526b3c Namjae Jeon 2026-02-13 553
> b041ca562526b3c Namjae Jeon 2026-02-13 554 return 0;
> b041ca562526b3c Namjae Jeon 2026-02-13 555 }
> b041ca562526b3c Namjae Jeon 2026-02-13 556
>
> :::::: The code at line 481 was first introduced by commit
> :::::: b041ca562526b3c4a71b41b80ba5e520eac636ad ntfs: update iomap and address space operations
>
> :::::: TO: Namjae Jeon <linkinjeon@kernel.org>
> :::::: CC: Namjae Jeon <linkinjeon@kernel.org>
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-11-06 11:16 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-06 10:22 fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this memory at line 460 (fwd) Julia Lawall
2026-11-06 11:16 ` Namjae Jeon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®