All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] md/bitmap: don't set sb values if can't pass sanity check
@ 2022-03-25  2:52 Heming Zhao
  2022-03-28  0:43 ` Guoqing Jiang
  0 siblings, 1 reply; 9+ messages in thread
From: Heming Zhao @ 2022-03-25  2:52 UTC (permalink / raw)
  To: linux-raid, song; +Cc: Heming Zhao, guoqing.jiang, xni

If bitmap area contains invalid data, kernel may crash or mdadm
triggers FPE (Floating exception)
This is cluster-md speical bug. In non-clustered env, mdadm will
handle broken metadata case. In clustered array, only kernel space
handles bitmap slot info. But even this bug only happened in clustered
env, current sanity check is wrong, the code should be changed.

How to trigger: (faulty injection)

dd if=/dev/zero bs=1M count=3 oflag=direct of=/dev/sda
dd if=/dev/zero bs=1M count=3 oflag=direct of=/dev/sdb
mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda /dev/sdb
mdadm -Ss
echo aaa > magic.txt
 == below modifying slot 2 bitmap data ==
dd if=magic.txt of=/dev/sda seek=16384 bs=1 count=3 <== destory magic
dd if=/dev/zero of=/dev/sda seek=16436 bs=1 count=4 <== ZERO chunksize
mdadm -A /dev/md0 /dev/sda /dev/sdb
 == kernel crash. mdadm reports FPE ==

Signed-off-by: Heming Zhao <heming.zhao@suse.com>
---
 drivers/md/md-bitmap.c | 40 +++++++++++++++++++++-------------------
 1 file changed, 21 insertions(+), 19 deletions(-)

diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
index bfd6026d7809..f6dcdb3683bf 100644
--- a/drivers/md/md-bitmap.c
+++ b/drivers/md/md-bitmap.c
@@ -635,19 +635,6 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
 	err = -EINVAL;
 	sb = kmap_atomic(sb_page);
 
-	chunksize = le32_to_cpu(sb->chunksize);
-	daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
-	write_behind = le32_to_cpu(sb->write_behind);
-	sectors_reserved = le32_to_cpu(sb->sectors_reserved);
-	/* Setup nodes/clustername only if bitmap version is
-	 * cluster-compatible
-	 */
-	if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
-		nodes = le32_to_cpu(sb->nodes);
-		strlcpy(bitmap->mddev->bitmap_info.cluster_name,
-				sb->cluster_name, 64);
-	}
-
 	/* verify that the bitmap-specific fields are valid */
 	if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
 		reason = "bad magic";
@@ -668,6 +655,19 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
 		goto out;
 	}
 
+	chunksize = le32_to_cpu(sb->chunksize);
+	daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
+	write_behind = le32_to_cpu(sb->write_behind);
+	sectors_reserved = le32_to_cpu(sb->sectors_reserved);
+	/* Setup nodes/clustername only if bitmap version is
+	 * cluster-compatible
+	 */
+	if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
+		nodes = le32_to_cpu(sb->nodes);
+		strlcpy(bitmap->mddev->bitmap_info.cluster_name,
+				sb->cluster_name, 64);
+	}
+
 	/* keep the array size field of the bitmap superblock up to date */
 	sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
 
@@ -700,9 +700,9 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
 
 out:
 	kunmap_atomic(sb);
-	/* Assigning chunksize is required for "re_read" */
-	bitmap->mddev->bitmap_info.chunksize = chunksize;
 	if (err == 0 && nodes && (bitmap->cluster_slot < 0)) {
+		/* Assigning chunksize is required for "re_read" */
+		bitmap->mddev->bitmap_info.chunksize = chunksize;
 		err = md_setup_cluster(bitmap->mddev, nodes);
 		if (err) {
 			pr_warn("%s: Could not setup cluster service (%d)\n",
@@ -717,10 +717,12 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
 out_no_sb:
 	if (test_bit(BITMAP_STALE, &bitmap->flags))
 		bitmap->events_cleared = bitmap->mddev->events;
-	bitmap->mddev->bitmap_info.chunksize = chunksize;
-	bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
-	bitmap->mddev->bitmap_info.max_write_behind = write_behind;
-	bitmap->mddev->bitmap_info.nodes = nodes;
+	if (err == 0) {
+		bitmap->mddev->bitmap_info.chunksize = chunksize;
+		bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
+		bitmap->mddev->bitmap_info.max_write_behind = write_behind;
+		bitmap->mddev->bitmap_info.nodes = nodes;
+	}
 	if (bitmap->mddev->bitmap_info.space == 0 ||
 	    bitmap->mddev->bitmap_info.space > sectors_reserved)
 		bitmap->mddev->bitmap_info.space = sectors_reserved;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] md/bitmap: don't set sb values if can't pass sanity check
  2022-03-25  2:52 Heming Zhao
  2022-03-28  0:43 ` Guoqing Jiang
@ 2022-03-29 13:05 ` Dan Carpenter
  0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2022-03-25 22:55 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 19160 bytes --]

CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
In-Reply-To: <20220325025223.1866-1-heming.zhao@suse.com>
References: <20220325025223.1866-1-heming.zhao@suse.com>
TO: Heming Zhao <heming.zhao@suse.com>
TO: linux-raid(a)vger.kernel.org
TO: song(a)kernel.org
CC: Heming Zhao <heming.zhao@suse.com>
CC: guoqing.jiang(a)linux.dev
CC: xni(a)redhat.com

Hi Heming,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on song-md/md-next]
[also build test WARNING on v5.17 next-20220325]
[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]

url:    https://github.com/0day-ci/linux/commits/Heming-Zhao/md-bitmap-don-t-set-sb-values-if-can-t-pass-sanity-check/20220325-105426
base:   git://git.kernel.org/pub/scm/linux/kernel/git/song/md.git md-next
:::::: branch date: 20 hours ago
:::::: commit date: 20 hours ago
config: powerpc-randconfig-m031-20220324 (https://download.01.org/0day-ci/archive/20220326/202203260647.ZIDU6VYv-lkp(a)intel.com/config)
compiler: powerpc-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/md/md-bitmap.c:644 md_bitmap_read_sb() error: uninitialized symbol 'chunksize'.
drivers/md/md-bitmap.c:648 md_bitmap_read_sb() error: uninitialized symbol 'daemon_sleep'.
drivers/md/md-bitmap.c:650 md_bitmap_read_sb() error: uninitialized symbol 'write_behind'.

Old smatch warnings:
drivers/md/md-bitmap.c:371 read_page() warn: should 'index << (12 - inode->i_blkbits)' be a 64 bit type?
drivers/md/md-bitmap.c:2182 md_bitmap_resize() warn: should 'old_counts.chunks << old_counts.chunkshift' be a 64 bit type?
drivers/md/md-bitmap.c:2206 md_bitmap_resize() warn: should '1 << chunkshift' be a 64 bit type?

vim +/chunksize +644 drivers/md/md-bitmap.c

9c81075f436f86 drivers/md/bitmap.c    Jonathan Brassow  2011-06-08  576  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  577  /* read the superblock from the bitmap file and initialize some bitmap fields */
e64e4018d57271 drivers/md/md-bitmap.c Andy Shevchenko   2018-08-01  578  static int md_bitmap_read_sb(struct bitmap *bitmap)
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  579  {
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  580  	char *reason = NULL;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  581  	bitmap_super_t *sb;
4b6d287f627b5f drivers/md/bitmap.c    NeilBrown         2005-09-09  582  	unsigned long chunksize, daemon_sleep, write_behind;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  583  	unsigned long long events;
c4ce867fdad200 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-03-29  584  	int nodes = 0;
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  585  	unsigned long sectors_reserved = 0;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  586  	int err = -EINVAL;
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  587  	struct page *sb_page;
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  588  	loff_t offset = bitmap->mddev->bitmap_info.offset;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  589  
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  590  	if (!bitmap->storage.file && !bitmap->mddev->bitmap_info.offset) {
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  591  		chunksize = 128 * 1024 * 1024;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  592  		daemon_sleep = 5 * HZ;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  593  		write_behind = 0;
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  594  		set_bit(BITMAP_STALE, &bitmap->flags);
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  595  		err = 0;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  596  		goto out_no_sb;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  597  	}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  598  	/* page 0 is the superblock, read it... */
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  599  	sb_page = alloc_page(GFP_KERNEL);
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  600  	if (!sb_page)
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  601  		return -ENOMEM;
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  602  	bitmap->storage.sb_page = sb_page;
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  603  
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  604  re_read:
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  605  	/* If cluster_slot is set, the cluster is setup */
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  606  	if (bitmap->cluster_slot >= 0) {
3b0e6aacbfe04f drivers/md/bitmap.c    Stephen Rothwell  2015-03-03  607  		sector_t bm_blocks = bitmap->mddev->resync_max_sectors;
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  608  
a913096decbf41 drivers/md/md-bitmap.c Zhao Heming       2020-10-06  609  		bm_blocks = DIV_ROUND_UP_SECTOR_T(bm_blocks,
a913096decbf41 drivers/md/md-bitmap.c Zhao Heming       2020-10-06  610  			   (bitmap->mddev->bitmap_info.chunksize >> 9));
124eb761edfdee drivers/md/bitmap.c    Goldwyn Rodrigues 2015-03-24  611  		/* bits to bytes */
124eb761edfdee drivers/md/bitmap.c    Goldwyn Rodrigues 2015-03-24  612  		bm_blocks = ((bm_blocks+7) >> 3) + sizeof(bitmap_super_t);
124eb761edfdee drivers/md/bitmap.c    Goldwyn Rodrigues 2015-03-24  613  		/* to 4k blocks */
935f3d4fc62c1f drivers/md/bitmap.c    NeilBrown         2015-03-02  614  		bm_blocks = DIV_ROUND_UP_SECTOR_T(bm_blocks, 4096);
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  615  		offset = bitmap->mddev->bitmap_info.offset + (bitmap->cluster_slot * (bm_blocks << 3));
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  616  		pr_debug("%s:%d bm slot: %d offset: %llu\n", __func__, __LINE__,
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  617  			bitmap->cluster_slot, offset);
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  618  	}
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  619  
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  620  	if (bitmap->storage.file) {
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  621  		loff_t isize = i_size_read(bitmap->storage.file->f_mapping->host);
f49d5e62d9352d drivers/md/bitmap.c    NeilBrown         2007-01-26  622  		int bytes = isize > PAGE_SIZE ? PAGE_SIZE : isize;
f49d5e62d9352d drivers/md/bitmap.c    NeilBrown         2007-01-26  623  
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  624  		err = read_page(bitmap->storage.file, 0,
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  625  				bitmap, bytes, sb_page);
f49d5e62d9352d drivers/md/bitmap.c    NeilBrown         2007-01-26  626  	} else {
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  627  		err = read_sb_page(bitmap->mddev,
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  628  				   offset,
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  629  				   sb_page,
938b533d479e74 drivers/md/bitmap.c    Shaohua Li        2017-10-16  630  				   0, sizeof(bitmap_super_t));
a654b9d8f851f4 drivers/md/bitmap.c    NeilBrown         2005-06-21  631  	}
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  632  	if (err)
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  633  		return err;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  634  
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  635  	err = -EINVAL;
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  636  	sb = kmap_atomic(sb_page);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  637  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  638  	/* verify that the bitmap-specific fields are valid */
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  639  	if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  640  		reason = "bad magic";
bd926c63b7a684 drivers/md/bitmap.c    NeilBrown         2005-11-08  641  	else if (le32_to_cpu(sb->version) < BITMAP_MAJOR_LO ||
3c462c880b52aa drivers/md/bitmap.c    Goldwyn Rodrigues 2015-08-19  642  		 le32_to_cpu(sb->version) > BITMAP_MAJOR_CLUSTERED)
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  643  		reason = "unrecognized superblock version";
1187cf0a3c8b64 drivers/md/bitmap.c    NeilBrown         2009-03-31 @644  	else if (chunksize < 512)
7dd5d34c6c2da0 drivers/md/bitmap.c    NeilBrown         2006-01-06  645  		reason = "bitmap chunksize too small";
d744540cd39e93 drivers/md/bitmap.c    Jonathan Brassow  2011-06-08  646  	else if (!is_power_of_2(chunksize))
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  647  		reason = "bitmap chunksize not a power of 2";
1b04be96f6910e drivers/md/bitmap.c    NeilBrown         2009-12-14 @648  	else if (daemon_sleep < 1 || daemon_sleep > MAX_SCHEDULE_TIMEOUT)
7dd5d34c6c2da0 drivers/md/bitmap.c    NeilBrown         2006-01-06  649  		reason = "daemon sleep period out of range";
4b6d287f627b5f drivers/md/bitmap.c    NeilBrown         2005-09-09 @650  	else if (write_behind > COUNTER_MAX)
4b6d287f627b5f drivers/md/bitmap.c    NeilBrown         2005-09-09  651  		reason = "write-behind limit out of range (0 - 16383)";
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  652  	if (reason) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  653  		pr_warn("%s: invalid bitmap file superblock: %s\n",
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  654  			bmname(bitmap), reason);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  655  		goto out;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  656  	}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  657  
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  658  	chunksize = le32_to_cpu(sb->chunksize);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  659  	daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  660  	write_behind = le32_to_cpu(sb->write_behind);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  661  	sectors_reserved = le32_to_cpu(sb->sectors_reserved);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  662  	/* Setup nodes/clustername only if bitmap version is
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  663  	 * cluster-compatible
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  664  	 */
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  665  	if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  666  		nodes = le32_to_cpu(sb->nodes);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  667  		strlcpy(bitmap->mddev->bitmap_info.cluster_name,
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  668  				sb->cluster_name, 64);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  669  	}
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  670  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  671  	/* keep the array size field of the bitmap superblock up to date */
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  672  	sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  673  
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  674  	if (bitmap->mddev->persistent) {
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  675  		/*
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  676  		 * We have a persistent array superblock, so compare the
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  677  		 * bitmap's UUID and event counter to the mddev's
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  678  		 */
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  679  		if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  680  			pr_warn("%s: bitmap superblock UUID mismatch\n",
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  681  				bmname(bitmap));
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  682  			goto out;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  683  		}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  684  		events = le64_to_cpu(sb->events);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  685  		if (!nodes && (events < bitmap->mddev->events)) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  686  			pr_warn("%s: bitmap file is out of date (%llu < %llu) -- forcing full recovery\n",
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  687  				bmname(bitmap), events,
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  688  				(unsigned long long) bitmap->mddev->events);
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  689  			set_bit(BITMAP_STALE, &bitmap->flags);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  690  		}
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  691  	}
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  692  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  693  	/* assign fields using values from superblock */
4f2e639af4bd5e drivers/md/bitmap.c    NeilBrown         2006-10-21  694  	bitmap->flags |= le32_to_cpu(sb->state);
bd926c63b7a684 drivers/md/bitmap.c    NeilBrown         2005-11-08  695  	if (le32_to_cpu(sb->version) == BITMAP_MAJOR_HOSTENDIAN)
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  696  		set_bit(BITMAP_HOSTENDIAN, &bitmap->flags);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  697  	bitmap->events_cleared = le64_to_cpu(sb->events_cleared);
cf921cc19cf7c1 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-03-30  698  	strlcpy(bitmap->mddev->bitmap_info.cluster_name, sb->cluster_name, 64);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  699  	err = 0;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  700  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  701  out:
b2f46e68825648 drivers/md/bitmap.c    Cong Wang         2011-11-28  702  	kunmap_atomic(sb);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  703  	if (err == 0 && nodes && (bitmap->cluster_slot < 0)) {
3560741e316b3e drivers/md/bitmap.c    Zhilong Liu       2017-03-15  704  		/* Assigning chunksize is required for "re_read" */
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  705  		bitmap->mddev->bitmap_info.chunksize = chunksize;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  706  		err = md_setup_cluster(bitmap->mddev, nodes);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  707  		if (err) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  708  			pr_warn("%s: Could not setup cluster service (%d)\n",
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  709  				bmname(bitmap), err);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  710  			goto out_no_sb;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  711  		}
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  712  		bitmap->cluster_slot = md_cluster_ops->slot_number(bitmap->mddev);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  713  		goto re_read;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  714  	}
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  715  
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  716  
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  717  out_no_sb:
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  718  	if (test_bit(BITMAP_STALE, &bitmap->flags))
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  719  		bitmap->events_cleared = bitmap->mddev->events;
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  720  	if (err == 0) {
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  721  		bitmap->mddev->bitmap_info.chunksize = chunksize;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  722  		bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  723  		bitmap->mddev->bitmap_info.max_write_behind = write_behind;
c4ce867fdad200 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-03-29  724  		bitmap->mddev->bitmap_info.nodes = nodes;
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  725  	}
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  726  	if (bitmap->mddev->bitmap_info.space == 0 ||
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  727  	    bitmap->mddev->bitmap_info.space > sectors_reserved)
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  728  		bitmap->mddev->bitmap_info.space = sectors_reserved;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  729  	if (err) {
e64e4018d57271 drivers/md/md-bitmap.c Andy Shevchenko   2018-08-01  730  		md_bitmap_print_sb(bitmap);
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  731  		if (bitmap->cluster_slot < 0)
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  732  			md_cluster_stop(bitmap->mddev);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  733  	}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  734  	return err;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  735  }
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  736  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] md/bitmap: don't set sb values if can't pass sanity check
  2022-03-25  2:52 Heming Zhao
@ 2022-03-28  0:43 ` Guoqing Jiang
  2022-03-29  2:37   ` heming.zhao
  0 siblings, 1 reply; 9+ messages in thread
From: Guoqing Jiang @ 2022-03-28  0:43 UTC (permalink / raw)
  To: Heming Zhao, linux-raid, song; +Cc: xni



On 3/25/22 10:52 AM, Heming Zhao wrote:
> If bitmap area contains invalid data, kernel may crash or mdadm
> triggers FPE (Floating exception)
> This is cluster-md speical bug. In non-clustered env, mdadm will
> handle broken metadata case. In clustered array, only kernel space
> handles bitmap slot info. But even this bug only happened in clustered
> env, current sanity check is wrong, the code should be changed.
>
> How to trigger: (faulty injection)
>
> dd if=/dev/zero bs=1M count=3 oflag=direct of=/dev/sda
> dd if=/dev/zero bs=1M count=3 oflag=direct of=/dev/sdb
> mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda /dev/sdb
> mdadm -Ss
> echo aaa > magic.txt
>   == below modifying slot 2 bitmap data ==
> dd if=magic.txt of=/dev/sda seek=16384 bs=1 count=3 <== destory magic
> dd if=/dev/zero of=/dev/sda seek=16436 bs=1 count=4 <== ZERO chunksize
> mdadm -A /dev/md0 /dev/sda /dev/sdb
>   == kernel crash. mdadm reports FPE ==

Thanks, could you also share the crash log to make people understand it
better?

>
> Signed-off-by: Heming Zhao <heming.zhao@suse.com>
> ---
>   drivers/md/md-bitmap.c | 40 +++++++++++++++++++++-------------------
>   1 file changed, 21 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
> index bfd6026d7809..f6dcdb3683bf 100644
> --- a/drivers/md/md-bitmap.c
> +++ b/drivers/md/md-bitmap.c
> @@ -635,19 +635,6 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
>   	err = -EINVAL;
>   	sb = kmap_atomic(sb_page);
>   
> -	chunksize = le32_to_cpu(sb->chunksize);
> -	daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
> -	write_behind = le32_to_cpu(sb->write_behind);
> -	sectors_reserved = le32_to_cpu(sb->sectors_reserved);
> -	/* Setup nodes/clustername only if bitmap version is
> -	 * cluster-compatible
> -	 */
> -	if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
> -		nodes = le32_to_cpu(sb->nodes);
> -		strlcpy(bitmap->mddev->bitmap_info.cluster_name,
> -				sb->cluster_name, 64);
> -	}
> -
>   	/* verify that the bitmap-specific fields are valid */
>   	if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
>   		reason = "bad magic";
> @@ -668,6 +655,19 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
>   		goto out;
>   	}
>   
> +	chunksize = le32_to_cpu(sb->chunksize);
> +	daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
> +	write_behind = le32_to_cpu(sb->write_behind);
> +	sectors_reserved = le32_to_cpu(sb->sectors_reserved);
> +	/* Setup nodes/clustername only if bitmap version is
> +	 * cluster-compatible
> +	 */

I suppose kernel should print the "reason" if md failed to verify bitmap sb.
And at it, pls change the comment style to

/*
  *
  */

> +	if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
> +		nodes = le32_to_cpu(sb->nodes);
> +		strlcpy(bitmap->mddev->bitmap_info.cluster_name,
> +				sb->cluster_name, 64);
> +	}
> +
>   	/* keep the array size field of the bitmap superblock up to date */
>   	sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
>   
> @@ -700,9 +700,9 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
>   
>   out:
>   	kunmap_atomic(sb);
> -	/* Assigning chunksize is required for "re_read" */
> -	bitmap->mddev->bitmap_info.chunksize = chunksize;
>   	if (err == 0 && nodes && (bitmap->cluster_slot < 0)) {
> +		/* Assigning chunksize is required for "re_read" */
> +		bitmap->mddev->bitmap_info.chunksize = chunksize;
>   		err = md_setup_cluster(bitmap->mddev, nodes);
>   		if (err) {
>   			pr_warn("%s: Could not setup cluster service (%d)\n",
> @@ -717,10 +717,12 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
>   out_no_sb:
>   	if (test_bit(BITMAP_STALE, &bitmap->flags))
>   		bitmap->events_cleared = bitmap->mddev->events;
> -	bitmap->mddev->bitmap_info.chunksize = chunksize;
> -	bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
> -	bitmap->mddev->bitmap_info.max_write_behind = write_behind;
> -	bitmap->mddev->bitmap_info.nodes = nodes;
> +	if (err == 0) {
> +		bitmap->mddev->bitmap_info.chunksize = chunksize;
> +		bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
> +		bitmap->mddev->bitmap_info.max_write_behind = write_behind;
> +		bitmap->mddev->bitmap_info.nodes = nodes;
> +	}
>   	if (bitmap->mddev->bitmap_info.space == 0 ||
>   	    bitmap->mddev->bitmap_info.space > sectors_reserved)
>   		bitmap->mddev->bitmap_info.space = sectors_reserved;

Generally, I am fine with the change.

Thanks,
Guoqing

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] md/bitmap: don't set sb values if can't pass sanity check
  2022-03-28  0:43 ` Guoqing Jiang
@ 2022-03-29  2:37   ` heming.zhao
  2022-03-29  7:00     ` Guoqing Jiang
  0 siblings, 1 reply; 9+ messages in thread
From: heming.zhao @ 2022-03-29  2:37 UTC (permalink / raw)
  To: Guoqing Jiang, linux-raid, song; +Cc: xni

On 3/28/22 08:43, Guoqing Jiang wrote:
> 
> 
> On 3/25/22 10:52 AM, Heming Zhao wrote:
>> If bitmap area contains invalid data, kernel may crash or mdadm
>> triggers FPE (Floating exception)
>> This is cluster-md speical bug. In non-clustered env, mdadm will
>> handle broken metadata case. In clustered array, only kernel space
>> handles bitmap slot info. But even this bug only happened in clustered
>> env, current sanity check is wrong, the code should be changed.
>>
>> How to trigger: (faulty injection)
>>
>> dd if=/dev/zero bs=1M count=3 oflag=direct of=/dev/sda
>> dd if=/dev/zero bs=1M count=3 oflag=direct of=/dev/sdb
>> mdadm -C /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda /dev/sdb
>> mdadm -Ss
>> echo aaa > magic.txt
>>   == below modifying slot 2 bitmap data ==
>> dd if=magic.txt of=/dev/sda seek=16384 bs=1 count=3 <== destory magic
>> dd if=/dev/zero of=/dev/sda seek=16436 bs=1 count=4 <== ZERO chunksize
>> mdadm -A /dev/md0 /dev/sda /dev/sdb
>>   == kernel crash. mdadm reports FPE ==
> 
> Thanks, could you also share the crash log to make people understand it
> better?

OK. will update in v2 patch.

This patch derive from one SUSE customer's bug. That bug includes two issues at least:
- bitmap sanity check issue. This patch fixes this issue.
- spare disk setup issue. I preferred to file another patch to fix.

And two of the issues are specific cluster-md.

> 
>>
>> Signed-off-by: Heming Zhao <heming.zhao@suse.com>
>> ---
>>   drivers/md/md-bitmap.c | 40 +++++++++++++++++++++-------------------
>>   1 file changed, 21 insertions(+), 19 deletions(-)
>>
>> diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
>> index bfd6026d7809..f6dcdb3683bf 100644
>> --- a/drivers/md/md-bitmap.c
>> +++ b/drivers/md/md-bitmap.c
>> @@ -635,19 +635,6 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
>>       err = -EINVAL;
>>       sb = kmap_atomic(sb_page);
>> -    chunksize = le32_to_cpu(sb->chunksize);
>> -    daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
>> -    write_behind = le32_to_cpu(sb->write_behind);
>> -    sectors_reserved = le32_to_cpu(sb->sectors_reserved);
>> -    /* Setup nodes/clustername only if bitmap version is
>> -     * cluster-compatible
>> -     */
>> -    if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
>> -        nodes = le32_to_cpu(sb->nodes);
>> -        strlcpy(bitmap->mddev->bitmap_info.cluster_name,
>> -                sb->cluster_name, 64);
>> -    }
>> -
>>       /* verify that the bitmap-specific fields are valid */
>>       if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
>>           reason = "bad magic";
>> @@ -668,6 +655,19 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
>>           goto out;
>>       }
>> +    chunksize = le32_to_cpu(sb->chunksize);
>> +    daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
>> +    write_behind = le32_to_cpu(sb->write_behind);
>> +    sectors_reserved = le32_to_cpu(sb->sectors_reserved);
>> +    /* Setup nodes/clustername only if bitmap version is
>> +     * cluster-compatible
>> +     */
> 
> I suppose kernel should print the "reason" if md failed to verify bitmap sb.
> And at it, pls change the comment style to

Yes, legacy code already handle/print the reason before "goto out".
For comment style, this area comment is legacy code, not my new added. But I could
modify it to follow the code rule.
> 
> /*
>   *
>   */> 
>> +    if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
>> +        nodes = le32_to_cpu(sb->nodes);
>> +        strlcpy(bitmap->mddev->bitmap_info.cluster_name,
>> +                sb->cluster_name, 64);
>> +    }
>> +
>>       /* keep the array size field of the bitmap superblock up to date */
>>       sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
>> @@ -700,9 +700,9 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
>>   out:
>>       kunmap_atomic(sb);
>> -    /* Assigning chunksize is required for "re_read" */
>> -    bitmap->mddev->bitmap_info.chunksize = chunksize;
>>       if (err == 0 && nodes && (bitmap->cluster_slot < 0)) {
>> +        /* Assigning chunksize is required for "re_read" */
>> +        bitmap->mddev->bitmap_info.chunksize = chunksize;
>>           err = md_setup_cluster(bitmap->mddev, nodes);
>>           if (err) {
>>               pr_warn("%s: Could not setup cluster service (%d)\n",
>> @@ -717,10 +717,12 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
>>   out_no_sb:
>>       if (test_bit(BITMAP_STALE, &bitmap->flags))
>>           bitmap->events_cleared = bitmap->mddev->events;
>> -    bitmap->mddev->bitmap_info.chunksize = chunksize;
>> -    bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
>> -    bitmap->mddev->bitmap_info.max_write_behind = write_behind;
>> -    bitmap->mddev->bitmap_info.nodes = nodes;
>> +    if (err == 0) {
>> +        bitmap->mddev->bitmap_info.chunksize = chunksize;
>> +        bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
>> +        bitmap->mddev->bitmap_info.max_write_behind = write_behind;
>> +        bitmap->mddev->bitmap_info.nodes = nodes;
>> +    }
>>       if (bitmap->mddev->bitmap_info.space == 0 ||
>>           bitmap->mddev->bitmap_info.space > sectors_reserved)
>>           bitmap->mddev->bitmap_info.space = sectors_reserved;
> 
> Generally, I am fine with the change.

Thank you for your review.

Thanks,
Heming


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] md/bitmap: don't set sb values if can't pass sanity check
  2022-03-29  2:37   ` heming.zhao
@ 2022-03-29  7:00     ` Guoqing Jiang
  0 siblings, 0 replies; 9+ messages in thread
From: Guoqing Jiang @ 2022-03-29  7:00 UTC (permalink / raw)
  To: heming.zhao, linux-raid, song; +Cc: xni



On 3/29/22 10:37 AM, heming.zhao@suse.com wrote:
> Yes, legacy code already handle/print the reason before "goto out".
> For comment style, this area comment is legacy code, not my new added. 
> But I could
> modify it to follow the code rule. 

I am not blame you 😁. Since we are deal with relevant code, it would be 
better to correct
it's style as well, and a dedicated patch to improve style is usually 
not welcomed IMO.

Thanks,
Guoqing

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [kbuild] Re: [PATCH] md/bitmap: don't set sb values if can't pass sanity check
@ 2022-03-29 13:05 ` Dan Carpenter
  0 siblings, 0 replies; 9+ messages in thread
From: Dan Carpenter @ 2022-03-29 13:05 UTC (permalink / raw)
  To: kbuild, Heming Zhao, linux-raid, song
  Cc: lkp, kbuild-all, Heming Zhao, guoqing.jiang, xni

Hi Heming,

url:    https://github.com/0day-ci/linux/commits/Heming-Zhao/md-bitmap-don-t-set-sb-values-if-can-t-pass-sanity-check/20220325-105426 
base:   git://git.kernel.org/pub/scm/linux/kernel/git/song/md.git md-next
config: powerpc-randconfig-m031-20220324 (https://download.01.org/0day-ci/archive/20220326/202203260647.ZIDU6VYv-lkp@intel.com/config )
compiler: powerpc-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/md/md-bitmap.c:644 md_bitmap_read_sb() error: uninitialized symbol 'chunksize'.
drivers/md/md-bitmap.c:648 md_bitmap_read_sb() error: uninitialized symbol 'daemon_sleep'.
drivers/md/md-bitmap.c:650 md_bitmap_read_sb() error: uninitialized symbol 'write_behind'.

Old smatch warnings:
drivers/md/md-bitmap.c:371 read_page() warn: should 'index << (12 - inode->i_blkbits)' be a 64 bit type?
drivers/md/md-bitmap.c:2182 md_bitmap_resize() warn: should 'old_counts.chunks << old_counts.chunkshift' be a 64 bit type?
drivers/md/md-bitmap.c:2206 md_bitmap_resize() warn: should '1 << chunkshift' be a 64 bit type?

vim +/chunksize +644 drivers/md/md-bitmap.c

e64e4018d57271 drivers/md/md-bitmap.c Andy Shevchenko   2018-08-01  578  static int md_bitmap_read_sb(struct bitmap *bitmap)
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  579  {
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  580  	char *reason = NULL;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  581  	bitmap_super_t *sb;
4b6d287f627b5f drivers/md/bitmap.c    NeilBrown         2005-09-09  582  	unsigned long chunksize, daemon_sleep, write_behind;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  583  	unsigned long long events;
c4ce867fdad200 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-03-29  584  	int nodes = 0;
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  585  	unsigned long sectors_reserved = 0;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  586  	int err = -EINVAL;
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  587  	struct page *sb_page;
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  588  	loff_t offset = bitmap->mddev->bitmap_info.offset;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  589  
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  590  	if (!bitmap->storage.file && !bitmap->mddev->bitmap_info.offset) {
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  591  		chunksize = 128 * 1024 * 1024;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  592  		daemon_sleep = 5 * HZ;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  593  		write_behind = 0;
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  594  		set_bit(BITMAP_STALE, &bitmap->flags);
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  595  		err = 0;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  596  		goto out_no_sb;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  597  	}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  598  	/* page 0 is the superblock, read it... */
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  599  	sb_page = alloc_page(GFP_KERNEL);
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  600  	if (!sb_page)
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  601  		return -ENOMEM;
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  602  	bitmap->storage.sb_page = sb_page;
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  603  
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  604  re_read:
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  605  	/* If cluster_slot is set, the cluster is setup */
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  606  	if (bitmap->cluster_slot >= 0) {
3b0e6aacbfe04f drivers/md/bitmap.c    Stephen Rothwell  2015-03-03  607  		sector_t bm_blocks = bitmap->mddev->resync_max_sectors;
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  608  
a913096decbf41 drivers/md/md-bitmap.c Zhao Heming       2020-10-06  609  		bm_blocks = DIV_ROUND_UP_SECTOR_T(bm_blocks,
a913096decbf41 drivers/md/md-bitmap.c Zhao Heming       2020-10-06  610  			   (bitmap->mddev->bitmap_info.chunksize >> 9));
124eb761edfdee drivers/md/bitmap.c    Goldwyn Rodrigues 2015-03-24  611  		/* bits to bytes */
124eb761edfdee drivers/md/bitmap.c    Goldwyn Rodrigues 2015-03-24  612  		bm_blocks = ((bm_blocks+7) >> 3) + sizeof(bitmap_super_t);
124eb761edfdee drivers/md/bitmap.c    Goldwyn Rodrigues 2015-03-24  613  		/* to 4k blocks */
935f3d4fc62c1f drivers/md/bitmap.c    NeilBrown         2015-03-02  614  		bm_blocks = DIV_ROUND_UP_SECTOR_T(bm_blocks, 4096);
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  615  		offset = bitmap->mddev->bitmap_info.offset + (bitmap->cluster_slot * (bm_blocks << 3));
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  616  		pr_debug("%s:%d bm slot: %d offset: %llu\n", __func__, __LINE__,
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  617  			bitmap->cluster_slot, offset);
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  618  	}
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  619  
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  620  	if (bitmap->storage.file) {
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  621  		loff_t isize = i_size_read(bitmap->storage.file->f_mapping->host);
f49d5e62d9352d drivers/md/bitmap.c    NeilBrown         2007-01-26  622  		int bytes = isize > PAGE_SIZE ? PAGE_SIZE : isize;
f49d5e62d9352d drivers/md/bitmap.c    NeilBrown         2007-01-26  623  
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  624  		err = read_page(bitmap->storage.file, 0,
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  625  				bitmap, bytes, sb_page);
f49d5e62d9352d drivers/md/bitmap.c    NeilBrown         2007-01-26  626  	} else {
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  627  		err = read_sb_page(bitmap->mddev,
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  628  				   offset,
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  629  				   sb_page,
938b533d479e74 drivers/md/bitmap.c    Shaohua Li        2017-10-16  630  				   0, sizeof(bitmap_super_t));
a654b9d8f851f4 drivers/md/bitmap.c    NeilBrown         2005-06-21  631  	}
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  632  	if (err)
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  633  		return err;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  634  
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  635  	err = -EINVAL;
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  636  	sb = kmap_atomic(sb_page);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  637  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  638  	/* verify that the bitmap-specific fields are valid */
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  639  	if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  640  		reason = "bad magic";
bd926c63b7a684 drivers/md/bitmap.c    NeilBrown         2005-11-08  641  	else if (le32_to_cpu(sb->version) < BITMAP_MAJOR_LO ||
3c462c880b52aa drivers/md/bitmap.c    Goldwyn Rodrigues 2015-08-19  642  		 le32_to_cpu(sb->version) > BITMAP_MAJOR_CLUSTERED)
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  643  		reason = "unrecognized superblock version";
1187cf0a3c8b64 drivers/md/bitmap.c    NeilBrown         2009-03-31 @644  	else if (chunksize < 512)

Checked before initialized

7dd5d34c6c2da0 drivers/md/bitmap.c    NeilBrown         2006-01-06  645  		reason = "bitmap chunksize too small";
d744540cd39e93 drivers/md/bitmap.c    Jonathan Brassow  2011-06-08  646  	else if (!is_power_of_2(chunksize))
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  647  		reason = "bitmap chunksize not a power of 2";
1b04be96f6910e drivers/md/bitmap.c    NeilBrown         2009-12-14 @648  	else if (daemon_sleep < 1 || daemon_sleep > MAX_SCHEDULE_TIMEOUT)
7dd5d34c6c2da0 drivers/md/bitmap.c    NeilBrown         2006-01-06  649  		reason = "daemon sleep period out of range";
4b6d287f627b5f drivers/md/bitmap.c    NeilBrown         2005-09-09 @650  	else if (write_behind > COUNTER_MAX)
4b6d287f627b5f drivers/md/bitmap.c    NeilBrown         2005-09-09  651  		reason = "write-behind limit out of range (0 - 16383)";
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  652  	if (reason) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  653  		pr_warn("%s: invalid bitmap file superblock: %s\n",
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  654  			bmname(bitmap), reason);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  655  		goto out;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  656  	}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  657  
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  658  	chunksize = le32_to_cpu(sb->chunksize);

Initialize here

f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  659  	daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  660  	write_behind = le32_to_cpu(sb->write_behind);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  661  	sectors_reserved = le32_to_cpu(sb->sectors_reserved);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  662  	/* Setup nodes/clustername only if bitmap version is
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  663  	 * cluster-compatible
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  664  	 */
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  665  	if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  666  		nodes = le32_to_cpu(sb->nodes);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  667  		strlcpy(bitmap->mddev->bitmap_info.cluster_name,
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  668  				sb->cluster_name, 64);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  669  	}
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  670  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  671  	/* keep the array size field of the bitmap superblock up to date */
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  672  	sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  673  
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  674  	if (bitmap->mddev->persistent) {
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  675  		/*
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  676  		 * We have a persistent array superblock, so compare the
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  677  		 * bitmap's UUID and event counter to the mddev's
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  678  		 */
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  679  		if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  680  			pr_warn("%s: bitmap superblock UUID mismatch\n",
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  681  				bmname(bitmap));
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  682  			goto out;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  683  		}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  684  		events = le64_to_cpu(sb->events);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  685  		if (!nodes && (events < bitmap->mddev->events)) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  686  			pr_warn("%s: bitmap file is out of date (%llu < %llu) -- forcing full recovery\n",
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  687  				bmname(bitmap), events,
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  688  				(unsigned long long) bitmap->mddev->events);
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  689  			set_bit(BITMAP_STALE, &bitmap->flags);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  690  		}
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  691  	}
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  692  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  693  	/* assign fields using values from superblock */
4f2e639af4bd5e drivers/md/bitmap.c    NeilBrown         2006-10-21  694  	bitmap->flags |= le32_to_cpu(sb->state);
bd926c63b7a684 drivers/md/bitmap.c    NeilBrown         2005-11-08  695  	if (le32_to_cpu(sb->version) == BITMAP_MAJOR_HOSTENDIAN)
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  696  		set_bit(BITMAP_HOSTENDIAN, &bitmap->flags);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  697  	bitmap->events_cleared = le64_to_cpu(sb->events_cleared);
cf921cc19cf7c1 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-03-30  698  	strlcpy(bitmap->mddev->bitmap_info.cluster_name, sb->cluster_name, 64);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  699  	err = 0;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  700  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  701  out:
b2f46e68825648 drivers/md/bitmap.c    Cong Wang         2011-11-28  702  	kunmap_atomic(sb);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  703  	if (err == 0 && nodes && (bitmap->cluster_slot < 0)) {
3560741e316b3e drivers/md/bitmap.c    Zhilong Liu       2017-03-15  704  		/* Assigning chunksize is required for "re_read" */
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  705  		bitmap->mddev->bitmap_info.chunksize = chunksize;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  706  		err = md_setup_cluster(bitmap->mddev, nodes);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  707  		if (err) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  708  			pr_warn("%s: Could not setup cluster service (%d)\n",
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  709  				bmname(bitmap), err);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  710  			goto out_no_sb;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  711  		}
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  712  		bitmap->cluster_slot = md_cluster_ops->slot_number(bitmap->mddev);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  713  		goto re_read;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  714  	}
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  715  
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  716  
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  717  out_no_sb:
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  718  	if (test_bit(BITMAP_STALE, &bitmap->flags))
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  719  		bitmap->events_cleared = bitmap->mddev->events;
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  720  	if (err == 0) {
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  721  		bitmap->mddev->bitmap_info.chunksize = chunksize;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  722  		bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  723  		bitmap->mddev->bitmap_info.max_write_behind = write_behind;
c4ce867fdad200 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-03-29  724  		bitmap->mddev->bitmap_info.nodes = nodes;
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  725  	}
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  726  	if (bitmap->mddev->bitmap_info.space == 0 ||
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  727  	    bitmap->mddev->bitmap_info.space > sectors_reserved)
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  728  		bitmap->mddev->bitmap_info.space = sectors_reserved;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  729  	if (err) {
e64e4018d57271 drivers/md/md-bitmap.c Andy Shevchenko   2018-08-01  730  		md_bitmap_print_sb(bitmap);
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  731  		if (bitmap->cluster_slot < 0)
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  732  			md_cluster_stop(bitmap->mddev);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  733  	}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  734  	return err;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  735  }

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp 
_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-leave@lists.01.org


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [kbuild] Re: [PATCH] md/bitmap: don't set sb values if can't pass sanity check
@ 2022-03-29 13:05 ` Dan Carpenter
  0 siblings, 0 replies; 9+ messages in thread
From: Dan Carpenter @ 2022-03-29 13:05 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 18294 bytes --]

Hi Heming,

url:    https://github.com/0day-ci/linux/commits/Heming-Zhao/md-bitmap-don-t-set-sb-values-if-can-t-pass-sanity-check/20220325-105426 
base:   git://git.kernel.org/pub/scm/linux/kernel/git/song/md.git md-next
config: powerpc-randconfig-m031-20220324 (https://download.01.org/0day-ci/archive/20220326/202203260647.ZIDU6VYv-lkp(a)intel.com/config )
compiler: powerpc-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/md/md-bitmap.c:644 md_bitmap_read_sb() error: uninitialized symbol 'chunksize'.
drivers/md/md-bitmap.c:648 md_bitmap_read_sb() error: uninitialized symbol 'daemon_sleep'.
drivers/md/md-bitmap.c:650 md_bitmap_read_sb() error: uninitialized symbol 'write_behind'.

Old smatch warnings:
drivers/md/md-bitmap.c:371 read_page() warn: should 'index << (12 - inode->i_blkbits)' be a 64 bit type?
drivers/md/md-bitmap.c:2182 md_bitmap_resize() warn: should 'old_counts.chunks << old_counts.chunkshift' be a 64 bit type?
drivers/md/md-bitmap.c:2206 md_bitmap_resize() warn: should '1 << chunkshift' be a 64 bit type?

vim +/chunksize +644 drivers/md/md-bitmap.c

e64e4018d57271 drivers/md/md-bitmap.c Andy Shevchenko   2018-08-01  578  static int md_bitmap_read_sb(struct bitmap *bitmap)
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  579  {
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  580  	char *reason = NULL;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  581  	bitmap_super_t *sb;
4b6d287f627b5f drivers/md/bitmap.c    NeilBrown         2005-09-09  582  	unsigned long chunksize, daemon_sleep, write_behind;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  583  	unsigned long long events;
c4ce867fdad200 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-03-29  584  	int nodes = 0;
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  585  	unsigned long sectors_reserved = 0;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  586  	int err = -EINVAL;
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  587  	struct page *sb_page;
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  588  	loff_t offset = bitmap->mddev->bitmap_info.offset;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  589  
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  590  	if (!bitmap->storage.file && !bitmap->mddev->bitmap_info.offset) {
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  591  		chunksize = 128 * 1024 * 1024;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  592  		daemon_sleep = 5 * HZ;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  593  		write_behind = 0;
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  594  		set_bit(BITMAP_STALE, &bitmap->flags);
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  595  		err = 0;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  596  		goto out_no_sb;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  597  	}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  598  	/* page 0 is the superblock, read it... */
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  599  	sb_page = alloc_page(GFP_KERNEL);
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  600  	if (!sb_page)
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  601  		return -ENOMEM;
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  602  	bitmap->storage.sb_page = sb_page;
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  603  
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  604  re_read:
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  605  	/* If cluster_slot is set, the cluster is setup */
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  606  	if (bitmap->cluster_slot >= 0) {
3b0e6aacbfe04f drivers/md/bitmap.c    Stephen Rothwell  2015-03-03  607  		sector_t bm_blocks = bitmap->mddev->resync_max_sectors;
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  608  
a913096decbf41 drivers/md/md-bitmap.c Zhao Heming       2020-10-06  609  		bm_blocks = DIV_ROUND_UP_SECTOR_T(bm_blocks,
a913096decbf41 drivers/md/md-bitmap.c Zhao Heming       2020-10-06  610  			   (bitmap->mddev->bitmap_info.chunksize >> 9));
124eb761edfdee drivers/md/bitmap.c    Goldwyn Rodrigues 2015-03-24  611  		/* bits to bytes */
124eb761edfdee drivers/md/bitmap.c    Goldwyn Rodrigues 2015-03-24  612  		bm_blocks = ((bm_blocks+7) >> 3) + sizeof(bitmap_super_t);
124eb761edfdee drivers/md/bitmap.c    Goldwyn Rodrigues 2015-03-24  613  		/* to 4k blocks */
935f3d4fc62c1f drivers/md/bitmap.c    NeilBrown         2015-03-02  614  		bm_blocks = DIV_ROUND_UP_SECTOR_T(bm_blocks, 4096);
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  615  		offset = bitmap->mddev->bitmap_info.offset + (bitmap->cluster_slot * (bm_blocks << 3));
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  616  		pr_debug("%s:%d bm slot: %d offset: %llu\n", __func__, __LINE__,
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  617  			bitmap->cluster_slot, offset);
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  618  	}
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  619  
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  620  	if (bitmap->storage.file) {
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  621  		loff_t isize = i_size_read(bitmap->storage.file->f_mapping->host);
f49d5e62d9352d drivers/md/bitmap.c    NeilBrown         2007-01-26  622  		int bytes = isize > PAGE_SIZE ? PAGE_SIZE : isize;
f49d5e62d9352d drivers/md/bitmap.c    NeilBrown         2007-01-26  623  
1ec885cdd01a9a drivers/md/bitmap.c    NeilBrown         2012-05-22  624  		err = read_page(bitmap->storage.file, 0,
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  625  				bitmap, bytes, sb_page);
f49d5e62d9352d drivers/md/bitmap.c    NeilBrown         2007-01-26  626  	} else {
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  627  		err = read_sb_page(bitmap->mddev,
33e38ac6887d97 drivers/md/bitmap.c    Goldwyn Rodrigues 2015-07-01  628  				   offset,
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  629  				   sb_page,
938b533d479e74 drivers/md/bitmap.c    Shaohua Li        2017-10-16  630  				   0, sizeof(bitmap_super_t));
a654b9d8f851f4 drivers/md/bitmap.c    NeilBrown         2005-06-21  631  	}
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  632  	if (err)
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  633  		return err;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  634  
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  635  	err = -EINVAL;
27581e5ae01f77 drivers/md/bitmap.c    NeilBrown         2012-05-22  636  	sb = kmap_atomic(sb_page);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  637  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  638  	/* verify that the bitmap-specific fields are valid */
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  639  	if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  640  		reason = "bad magic";
bd926c63b7a684 drivers/md/bitmap.c    NeilBrown         2005-11-08  641  	else if (le32_to_cpu(sb->version) < BITMAP_MAJOR_LO ||
3c462c880b52aa drivers/md/bitmap.c    Goldwyn Rodrigues 2015-08-19  642  		 le32_to_cpu(sb->version) > BITMAP_MAJOR_CLUSTERED)
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  643  		reason = "unrecognized superblock version";
1187cf0a3c8b64 drivers/md/bitmap.c    NeilBrown         2009-03-31 @644  	else if (chunksize < 512)

Checked before initialized

7dd5d34c6c2da0 drivers/md/bitmap.c    NeilBrown         2006-01-06  645  		reason = "bitmap chunksize too small";
d744540cd39e93 drivers/md/bitmap.c    Jonathan Brassow  2011-06-08  646  	else if (!is_power_of_2(chunksize))
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  647  		reason = "bitmap chunksize not a power of 2";
1b04be96f6910e drivers/md/bitmap.c    NeilBrown         2009-12-14 @648  	else if (daemon_sleep < 1 || daemon_sleep > MAX_SCHEDULE_TIMEOUT)
7dd5d34c6c2da0 drivers/md/bitmap.c    NeilBrown         2006-01-06  649  		reason = "daemon sleep period out of range";
4b6d287f627b5f drivers/md/bitmap.c    NeilBrown         2005-09-09 @650  	else if (write_behind > COUNTER_MAX)
4b6d287f627b5f drivers/md/bitmap.c    NeilBrown         2005-09-09  651  		reason = "write-behind limit out of range (0 - 16383)";
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  652  	if (reason) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  653  		pr_warn("%s: invalid bitmap file superblock: %s\n",
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  654  			bmname(bitmap), reason);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  655  		goto out;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  656  	}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  657  
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  658  	chunksize = le32_to_cpu(sb->chunksize);

Initialize here

f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  659  	daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  660  	write_behind = le32_to_cpu(sb->write_behind);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  661  	sectors_reserved = le32_to_cpu(sb->sectors_reserved);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  662  	/* Setup nodes/clustername only if bitmap version is
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  663  	 * cluster-compatible
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  664  	 */
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  665  	if (sb->version == cpu_to_le32(BITMAP_MAJOR_CLUSTERED)) {
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  666  		nodes = le32_to_cpu(sb->nodes);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  667  		strlcpy(bitmap->mddev->bitmap_info.cluster_name,
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  668  				sb->cluster_name, 64);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  669  	}
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  670  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  671  	/* keep the array size field of the bitmap superblock up to date */
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  672  	sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  673  
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  674  	if (bitmap->mddev->persistent) {
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  675  		/*
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  676  		 * We have a persistent array superblock, so compare the
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  677  		 * bitmap's UUID and event counter to the mddev's
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  678  		 */
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  679  		if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  680  			pr_warn("%s: bitmap superblock UUID mismatch\n",
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  681  				bmname(bitmap));
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  682  			goto out;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  683  		}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  684  		events = le64_to_cpu(sb->events);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  685  		if (!nodes && (events < bitmap->mddev->events)) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  686  			pr_warn("%s: bitmap file is out of date (%llu < %llu) -- forcing full recovery\n",
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  687  				bmname(bitmap), events,
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  688  				(unsigned long long) bitmap->mddev->events);
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  689  			set_bit(BITMAP_STALE, &bitmap->flags);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  690  		}
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  691  	}
278c1ca2f254d0 drivers/md/bitmap.c    NeilBrown         2012-03-19  692  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  693  	/* assign fields using values from superblock */
4f2e639af4bd5e drivers/md/bitmap.c    NeilBrown         2006-10-21  694  	bitmap->flags |= le32_to_cpu(sb->state);
bd926c63b7a684 drivers/md/bitmap.c    NeilBrown         2005-11-08  695  	if (le32_to_cpu(sb->version) == BITMAP_MAJOR_HOSTENDIAN)
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  696  		set_bit(BITMAP_HOSTENDIAN, &bitmap->flags);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  697  	bitmap->events_cleared = le64_to_cpu(sb->events_cleared);
cf921cc19cf7c1 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-03-30  698  	strlcpy(bitmap->mddev->bitmap_info.cluster_name, sb->cluster_name, 64);
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  699  	err = 0;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  700  
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  701  out:
b2f46e68825648 drivers/md/bitmap.c    Cong Wang         2011-11-28  702  	kunmap_atomic(sb);
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  703  	if (err == 0 && nodes && (bitmap->cluster_slot < 0)) {
3560741e316b3e drivers/md/bitmap.c    Zhilong Liu       2017-03-15  704  		/* Assigning chunksize is required for "re_read" */
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  705  		bitmap->mddev->bitmap_info.chunksize = chunksize;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  706  		err = md_setup_cluster(bitmap->mddev, nodes);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  707  		if (err) {
ec0cc226854a79 drivers/md/bitmap.c    NeilBrown         2016-11-02  708  			pr_warn("%s: Could not setup cluster service (%d)\n",
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  709  				bmname(bitmap), err);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  710  			goto out_no_sb;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  711  		}
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  712  		bitmap->cluster_slot = md_cluster_ops->slot_number(bitmap->mddev);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  713  		goto re_read;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  714  	}
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  715  
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  716  
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  717  out_no_sb:
b405fe91e50c60 drivers/md/bitmap.c    NeilBrown         2012-05-22  718  	if (test_bit(BITMAP_STALE, &bitmap->flags))
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  719  		bitmap->events_cleared = bitmap->mddev->events;
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  720  	if (err == 0) {
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  721  		bitmap->mddev->bitmap_info.chunksize = chunksize;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  722  		bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
ef99bf480de9bd drivers/md/bitmap.c    NeilBrown         2012-05-22  723  		bitmap->mddev->bitmap_info.max_write_behind = write_behind;
c4ce867fdad200 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-03-29  724  		bitmap->mddev->bitmap_info.nodes = nodes;
f9fd5e55a60521 drivers/md/md-bitmap.c Heming Zhao       2022-03-25  725  	}
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  726  	if (bitmap->mddev->bitmap_info.space == 0 ||
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  727  	    bitmap->mddev->bitmap_info.space > sectors_reserved)
1dff2b87a34a1a drivers/md/bitmap.c    NeilBrown         2012-05-22  728  		bitmap->mddev->bitmap_info.space = sectors_reserved;
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  729  	if (err) {
e64e4018d57271 drivers/md/md-bitmap.c Andy Shevchenko   2018-08-01  730  		md_bitmap_print_sb(bitmap);
f9209a323547f0 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  731  		if (bitmap->cluster_slot < 0)
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  732  			md_cluster_stop(bitmap->mddev);
b97e92574c0bf3 drivers/md/bitmap.c    Goldwyn Rodrigues 2014-06-06  733  	}
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  734  	return err;
32a7627cf3a353 drivers/md/bitmap.c    NeilBrown         2005-06-21  735  }

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp 
_______________________________________________
kbuild mailing list -- kbuild(a)lists.01.org
To unsubscribe send an email to kbuild-leave(a)lists.01.org

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [kbuild] Re: [PATCH] md/bitmap: don't set sb values if can't pass sanity check
  2022-03-29 13:05 ` Dan Carpenter
@ 2022-03-30  2:18   ` heming.zhao
  -1 siblings, 0 replies; 9+ messages in thread
From: heming.zhao @ 2022-03-30  2:18 UTC (permalink / raw)
  To: Dan Carpenter, kbuild, linux-raid, song
  Cc: lkp, kbuild-all, guoqing.jiang, xni

Thanks for the information. my mistake. need v3 patch.

On 3/29/22 21:05, Dan Carpenter wrote:
> Hi Heming,
> 
> url:    https://github.com/0day-ci/linux/commits/Heming-Zhao/md-bitmap-don-t-set-sb-values-if-can-t-pass-sanity-check/20220325-105426
> base:   git://git.kernel.org/pub/scm/linux/kernel/git/song/md.git md-next
> config: powerpc-randconfig-m031-20220324 (https://download.01.org/0day-ci/archive/20220326/202203260647.ZIDU6VYv-lkp@intel.com/config )
> compiler: powerpc-linux-gcc (GCC) 11.2.0
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> 
> New smatch warnings:
> drivers/md/md-bitmap.c:644 md_bitmap_read_sb() error: uninitialized symbol 'chunksize'.
> drivers/md/md-bitmap.c:648 md_bitmap_read_sb() error: uninitialized symbol 'daemon_sleep'.
> drivers/md/md-bitmap.c:650 md_bitmap_read_sb() error: uninitialized symbol 'write_behind'.
> 
> Old smatch warnings:
> drivers/md/md-bitmap.c:371 read_page() warn: should 'index << (12 - inode->i_blkbits)' be a 64 bit type?
> drivers/md/md-bitmap.c:2182 md_bitmap_resize() warn: should 'old_counts.chunks << old_counts.chunkshift' be a 64 bit type?
> drivers/md/md-bitmap.c:2206 md_bitmap_resize() warn: should '1 << chunkshift' be a 64 bit type?
> 
> vim +/chunksize +644 drivers/md/md-bitmap.c
> 
> ... ... 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [kbuild] Re: [PATCH] md/bitmap: don't set sb values if can't pass sanity check
@ 2022-03-30  2:18   ` heming.zhao
  0 siblings, 0 replies; 9+ messages in thread
From: heming.zhao @ 2022-03-30  2:18 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 1426 bytes --]

Thanks for the information. my mistake. need v3 patch.

On 3/29/22 21:05, Dan Carpenter wrote:
> Hi Heming,
> 
> url:    https://github.com/0day-ci/linux/commits/Heming-Zhao/md-bitmap-don-t-set-sb-values-if-can-t-pass-sanity-check/20220325-105426
> base:   git://git.kernel.org/pub/scm/linux/kernel/git/song/md.git md-next
> config: powerpc-randconfig-m031-20220324 (https://download.01.org/0day-ci/archive/20220326/202203260647.ZIDU6VYv-lkp(a)intel.com/config )
> compiler: powerpc-linux-gcc (GCC) 11.2.0
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> 
> New smatch warnings:
> drivers/md/md-bitmap.c:644 md_bitmap_read_sb() error: uninitialized symbol 'chunksize'.
> drivers/md/md-bitmap.c:648 md_bitmap_read_sb() error: uninitialized symbol 'daemon_sleep'.
> drivers/md/md-bitmap.c:650 md_bitmap_read_sb() error: uninitialized symbol 'write_behind'.
> 
> Old smatch warnings:
> drivers/md/md-bitmap.c:371 read_page() warn: should 'index << (12 - inode->i_blkbits)' be a 64 bit type?
> drivers/md/md-bitmap.c:2182 md_bitmap_resize() warn: should 'old_counts.chunks << old_counts.chunkshift' be a 64 bit type?
> drivers/md/md-bitmap.c:2206 md_bitmap_resize() warn: should '1 << chunkshift' be a 64 bit type?
> 
> vim +/chunksize +644 drivers/md/md-bitmap.c
> 
> ... ... 

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-03-30  2:18 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-25 22:55 [PATCH] md/bitmap: don't set sb values if can't pass sanity check kernel test robot
2022-03-29 13:05 ` [kbuild] " Dan Carpenter
2022-03-29 13:05 ` Dan Carpenter
2022-03-30  2:18 ` heming.zhao
2022-03-30  2:18   ` heming.zhao
  -- strict thread matches above, loose matches on Subject: below --
2022-03-25  2:52 Heming Zhao
2022-03-28  0:43 ` Guoqing Jiang
2022-03-29  2:37   ` heming.zhao
2022-03-29  7:00     ` Guoqing Jiang

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.