All of lore.kernel.org
 help / color / mirror / Atom feed
* [bcache:for-next 13/23] drivers/md/bcache/super.c:216:36: sparse: sparse: incorrect type in assignment (different base types)
@ 2020-07-10  7:29 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2020-07-10  7:29 UTC (permalink / raw)
  To: kbuild-all

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/colyli/linux-bcache.git for-next
head:   fda12af14f942aa1b3c6b5b6aa8e9276febca58f
commit: 216de35c8ed4d7253b717d68336d32c97fced838 [13/23] bcache: increase super block version for cache device and backing device
config: arc-randconfig-s032-20200710 (attached as .config)
compiler: arc-elf-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.2-37-gc9676a3b-dirty
        git checkout 216de35c8ed4d7253b717d68336d32c97fced838
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arc 

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


sparse warnings: (new ones prefixed by >>)

   drivers/md/bcache/super.c:180:24: sparse: sparse: cast from restricted __le16
   drivers/md/bcache/super.c:180:14: sparse: sparse: restricted __le64 degrades to integer
>> drivers/md/bcache/super.c:216:36: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __le64 [usertype] feature_compat @@     got unsigned long long @@
   drivers/md/bcache/super.c:216:36: sparse:     expected restricted __le64 [usertype] feature_compat
   drivers/md/bcache/super.c:216:36: sparse:     got unsigned long long
>> drivers/md/bcache/super.c:217:38: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __le64 [usertype] feature_incompat @@     got unsigned long long @@
   drivers/md/bcache/super.c:217:38: sparse:     expected restricted __le64 [usertype] feature_incompat
   drivers/md/bcache/super.c:217:38: sparse:     got unsigned long long
>> drivers/md/bcache/super.c:218:39: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __le64 [usertype] feature_ro_compat @@     got unsigned long long @@
   drivers/md/bcache/super.c:218:39: sparse:     expected restricted __le64 [usertype] feature_ro_compat
   drivers/md/bcache/super.c:218:39: sparse:     got unsigned long long
   drivers/md/bcache/super.c:270:42: sparse: sparse: cast from restricted __le64
>> drivers/md/bcache/super.c:270:42: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned long long [usertype] val @@     got restricted __le64 [usertype] feature_compat @@
>> drivers/md/bcache/super.c:270:42: sparse:     expected unsigned long long [usertype] val
>> drivers/md/bcache/super.c:270:42: sparse:     got restricted __le64 [usertype] feature_compat
   drivers/md/bcache/super.c:270:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:270:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:270:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:270:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:270:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:270:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:270:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:270:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:271:42: sparse: sparse: cast from restricted __le64
>> drivers/md/bcache/super.c:271:42: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned long long [usertype] val @@     got restricted __le64 [usertype] feature_incompat @@
   drivers/md/bcache/super.c:271:42: sparse:     expected unsigned long long [usertype] val
>> drivers/md/bcache/super.c:271:42: sparse:     got restricted __le64 [usertype] feature_incompat
   drivers/md/bcache/super.c:271:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:271:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:271:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:271:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:271:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:271:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:271:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:271:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:272:42: sparse: sparse: cast from restricted __le64
>> drivers/md/bcache/super.c:272:42: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned long long [usertype] val @@     got restricted __le64 [usertype] feature_ro_compat @@
   drivers/md/bcache/super.c:272:42: sparse:     expected unsigned long long [usertype] val
>> drivers/md/bcache/super.c:272:42: sparse:     got restricted __le64 [usertype] feature_ro_compat
   drivers/md/bcache/super.c:272:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:272:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:272:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:272:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:272:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:272:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:272:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:272:42: sparse: sparse: cast from restricted __le64
   drivers/md/bcache/super.c:276:21: sparse: sparse: cast from restricted __le16
   drivers/md/bcache/super.c:276:19: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __le64 [usertype] csum @@     got unsigned long long @@
   drivers/md/bcache/super.c:276:19: sparse:     expected restricted __le64 [usertype] csum
   drivers/md/bcache/super.c:276:19: sparse:     got unsigned long long
   drivers/md/bcache/super.c:616:33: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned short [usertype] prio @@     got restricted __le16 [usertype] @@
   drivers/md/bcache/super.c:616:33: sparse:     expected unsigned short [usertype] prio
   drivers/md/bcache/super.c:616:33: sparse:     got restricted __le16 [usertype]
   drivers/md/bcache/super.c:689:27: sparse: sparse: cast to restricted __le16
   drivers/md/bcache/super.c:689:27: sparse: sparse: cast to restricted __le16
   drivers/md/bcache/super.c:689:27: sparse: sparse: cast to restricted __le16
   drivers/md/bcache/super.c:689:27: sparse: sparse: cast to restricted __le16
   drivers/md/bcache/super.c:795:32: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] invalidated @@     got restricted __le32 [usertype] @@
   drivers/md/bcache/super.c:795:32: sparse:     expected unsigned int [usertype] invalidated
   drivers/md/bcache/super.c:795:32: sparse:     got restricted __le32 [usertype]
   drivers/md/bcache/super.c:1170:26: sparse: sparse: incorrect type in initializer (different base types) @@     expected unsigned int [usertype] rtime @@     got restricted __le32 [usertype] @@
   drivers/md/bcache/super.c:1170:26: sparse:     expected unsigned int [usertype] rtime
   drivers/md/bcache/super.c:1170:26: sparse:     got restricted __le32 [usertype]
   drivers/md/bcache/super.c:1214:32: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] invalidated @@     got restricted __le32 [usertype] @@
   drivers/md/bcache/super.c:1214:32: sparse:     expected unsigned int [usertype] invalidated
   drivers/md/bcache/super.c:1214:32: sparse:     got restricted __le32 [usertype]
   drivers/md/bcache/super.c:1566:36: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] last_reg @@     got restricted __le32 [usertype] @@
   drivers/md/bcache/super.c:1566:36: sparse:     expected unsigned int [usertype] last_reg
   drivers/md/bcache/super.c:1566:36: sparse:     got restricted __le32 [usertype]

vim +216 drivers/md/bcache/super.c

    41	
    42	static struct kobject *bcache_kobj;
    43	struct mutex bch_register_lock;
  > 44	bool bcache_is_reboot;
    45	LIST_HEAD(bch_cache_sets);
    46	static LIST_HEAD(uncached_devices);
    47	
    48	static int bcache_major;
    49	static DEFINE_IDA(bcache_device_idx);
    50	static wait_queue_head_t unregister_wait;
    51	struct workqueue_struct *bcache_wq;
    52	struct workqueue_struct *bch_journal_wq;
    53	
    54	
    55	#define BTREE_MAX_PAGES		(256 * 1024 / PAGE_SIZE)
    56	/* limitation of partitions number on single bcache device */
    57	#define BCACHE_MINORS		128
    58	/* limitation of bcache devices number on single system */
    59	#define BCACHE_DEVICE_IDX_MAX	((1U << MINORBITS)/BCACHE_MINORS)
    60	
    61	/* Superblock */
    62	
    63	static const char *read_super_basic(struct cache_sb *sb,  struct block_device *bdev,
    64					     struct cache_sb_disk *s)
    65	{
    66		const char *err;
    67		unsigned int i;
    68	
    69		sb->nbuckets	= le64_to_cpu(s->nbuckets);
    70		sb->bucket_size	= le16_to_cpu(s->bucket_size);
    71	
    72		sb->nr_in_set	= le16_to_cpu(s->nr_in_set);
    73		sb->nr_this_dev	= le16_to_cpu(s->nr_this_dev);
    74	
    75		err = "Too many buckets";
    76		if (sb->nbuckets > LONG_MAX)
    77			goto err;
    78	
    79		err = "Not enough buckets";
    80		if (sb->nbuckets < 1 << 7)
    81			goto err;
    82	
    83		err = "Bad block size (not power of 2)";
    84		if (!is_power_of_2(sb->block_size))
    85			goto err;
    86	
    87		err = "Bad block size (larger than page size)";
    88		if (sb->block_size > PAGE_SECTORS)
    89			goto err;
    90	
    91		err = "Bad bucket size (not power of 2)";
    92		if (!is_power_of_2(sb->bucket_size))
    93			goto err;
    94	
    95		err = "Bad bucket size (smaller than page size)";
    96		if (sb->bucket_size < PAGE_SECTORS)
    97			goto err;
    98	
    99		err = "Invalid superblock: device too small";
   100		if (get_capacity(bdev->bd_disk) <
   101		    sb->bucket_size * sb->nbuckets)
   102			goto err;
   103	
   104		err = "Bad UUID";
   105		if (bch_is_zero(sb->set_uuid, 16))
   106			goto err;
   107	
   108		err = "Bad cache device number in set";
   109		if (!sb->nr_in_set ||
   110		    sb->nr_in_set <= sb->nr_this_dev ||
   111		    sb->nr_in_set > MAX_CACHES_PER_SET)
   112			goto err;
   113	
   114		err = "Journal buckets not sequential";
   115		for (i = 0; i < sb->keys; i++)
   116			if (sb->d[i] != sb->first_bucket + i)
   117				goto err;
   118	
   119		err = "Too many journal buckets";
   120		if (sb->first_bucket + sb->keys > sb->nbuckets)
   121			goto err;
   122	
   123		err = "Invalid superblock: first bucket comes before end of super";
   124		if (sb->first_bucket * sb->bucket_size < 16)
   125			goto err;
   126	
   127		err = NULL;
   128	err:
   129		return err;
   130	}
   131	
   132	
   133	static const char *read_super(struct cache_sb *sb, struct block_device *bdev,
   134				      struct cache_sb_disk **res)
   135	{
   136		const char *err;
   137		struct cache_sb_disk *s;
   138		struct page *page;
   139		unsigned int i;
   140	
   141		page = read_cache_page_gfp(bdev->bd_inode->i_mapping,
   142					   SB_OFFSET >> PAGE_SHIFT, GFP_KERNEL);
   143		if (IS_ERR(page))
   144			return "IO error";
   145		s = page_address(page) + offset_in_page(SB_OFFSET);
   146	
   147		sb->offset		= le64_to_cpu(s->offset);
   148		sb->version		= le64_to_cpu(s->version);
   149	
   150		memcpy(sb->magic,	s->magic, 16);
   151		memcpy(sb->uuid,	s->uuid, 16);
   152		memcpy(sb->set_uuid,	s->set_uuid, 16);
   153		memcpy(sb->label,	s->label, SB_LABEL_SIZE);
   154	
   155		sb->flags		= le64_to_cpu(s->flags);
   156		sb->seq			= le64_to_cpu(s->seq);
   157		sb->last_mount		= le32_to_cpu(s->last_mount);
   158		sb->first_bucket	= le16_to_cpu(s->first_bucket);
   159		sb->keys		= le16_to_cpu(s->keys);
   160	
   161		for (i = 0; i < SB_JOURNAL_BUCKETS; i++)
   162			sb->d[i] = le64_to_cpu(s->d[i]);
   163	
   164		pr_debug("read sb version %llu, flags %llu, seq %llu, journal size %u\n",
   165			 sb->version, sb->flags, sb->seq, sb->keys);
   166	
   167		err = "Not a bcache superblock (bad offset)";
   168		if (sb->offset != SB_SECTOR)
   169			goto err;
   170	
   171		err = "Not a bcache superblock (bad magic)";
   172		if (memcmp(sb->magic, bcache_magic, 16))
   173			goto err;
   174	
   175		err = "Too many journal buckets";
   176		if (sb->keys > SB_JOURNAL_BUCKETS)
   177			goto err;
   178	
   179		err = "Bad checksum";
   180		if (s->csum != csum_set(s))
   181			goto err;
   182	
   183		err = "Bad UUID";
   184		if (bch_is_zero(sb->uuid, 16))
   185			goto err;
   186	
   187		sb->block_size	= le16_to_cpu(s->block_size);
   188	
   189		err = "Superblock block size smaller than device block size";
   190		if (sb->block_size << 9 < bdev_logical_block_size(bdev))
   191			goto err;
   192	
   193		switch (sb->version) {
   194		case BCACHE_SB_VERSION_BDEV:
   195			sb->data_offset	= BDEV_DATA_START_DEFAULT;
   196			break;
   197		case BCACHE_SB_VERSION_BDEV_WITH_OFFSET:
   198		case BCACHE_SB_VERSION_BDEV_WITH_FEATURES:
   199			sb->data_offset	= le64_to_cpu(s->data_offset);
   200	
   201			err = "Bad data offset";
   202			if (sb->data_offset < BDEV_DATA_START_DEFAULT)
   203				goto err;
   204	
   205			break;
   206		case BCACHE_SB_VERSION_CDEV:
   207		case BCACHE_SB_VERSION_CDEV_WITH_UUID:
   208			err = read_super_basic(sb, bdev, s);
   209			if (err)
   210				goto err;
   211			break;
   212		case BCACHE_SB_VERSION_CDEV_WITH_FEATURES:
   213			err = read_super_basic(sb, bdev, s);
   214			if (err)
   215				goto err;
 > 216			sb->feature_compat = le64_to_cpu(s->feature_compat);
 > 217			sb->feature_incompat = le64_to_cpu(s->feature_incompat);
 > 218			sb->feature_ro_compat = le64_to_cpu(s->feature_ro_compat);
   219			break;
   220		default:
   221			err = "Unsupported superblock version";
   222			goto err;
   223		}
   224	
   225		sb->last_mount = (u32)ktime_get_real_seconds();
   226		*res = s;
   227		return NULL;
   228	err:
   229		put_page(page);
   230		return err;
   231	}
   232	
   233	static void write_bdev_super_endio(struct bio *bio)
   234	{
   235		struct cached_dev *dc = bio->bi_private;
   236	
   237		if (bio->bi_status)
   238			bch_count_backing_io_errors(dc, bio);
   239	
   240		closure_put(&dc->sb_write);
   241	}
   242	
   243	static void __write_super(struct cache_sb *sb, struct cache_sb_disk *out,
   244			struct bio *bio)
   245	{
   246		unsigned int i;
   247	
   248		bio->bi_opf = REQ_OP_WRITE | REQ_SYNC | REQ_META;
   249		bio->bi_iter.bi_sector	= SB_SECTOR;
   250		__bio_add_page(bio, virt_to_page(out), SB_SIZE,
   251				offset_in_page(out));
   252	
   253		out->offset		= cpu_to_le64(sb->offset);
   254	
   255		memcpy(out->uuid,	sb->uuid, 16);
   256		memcpy(out->set_uuid,	sb->set_uuid, 16);
   257		memcpy(out->label,	sb->label, SB_LABEL_SIZE);
   258	
   259		out->flags		= cpu_to_le64(sb->flags);
   260		out->seq		= cpu_to_le64(sb->seq);
   261	
   262		out->last_mount		= cpu_to_le32(sb->last_mount);
   263		out->first_bucket	= cpu_to_le16(sb->first_bucket);
   264		out->keys		= cpu_to_le16(sb->keys);
   265	
   266		for (i = 0; i < sb->keys; i++)
   267			out->d[i] = cpu_to_le64(sb->d[i]);
   268	
   269		if (sb->version >= BCACHE_SB_VERSION_CDEV_WITH_FEATURES) {
 > 270			out->feature_compat    = cpu_to_le64(sb->feature_compat);
 > 271			out->feature_incompat  = cpu_to_le64(sb->feature_incompat);
 > 272			out->feature_ro_compat = cpu_to_le64(sb->feature_ro_compat);
   273		}
   274	
   275		out->version		= cpu_to_le64(sb->version);
   276		out->csum = csum_set(out);
   277	
   278		pr_debug("ver %llu, flags %llu, seq %llu\n",
   279			 sb->version, sb->flags, sb->seq);
   280	
   281		submit_bio(bio);
   282	}
   283	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 28363 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-07-10  7:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-10  7:29 [bcache:for-next 13/23] drivers/md/bcache/super.c:216:36: sparse: sparse: incorrect type in assignment (different base types) kernel test robot

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.