mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* 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®