* [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.