[dm-devel] [dm:dm-4.17 25/25] drivers//md/dm-verity-target.c:560:22: error: assignment from incompatible pointer type

kbuild test robot fengguang.wu at intel.com
Mon Mar 26 22:34:19 UTC 2018


tree:   https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git dm-4.17
head:   8702a90d3c773f590c875d4300e751fce1780bbc
commit: 8702a90d3c773f590c875d4300e751fce1780bbc [25/25] dm verity: allow parallel processing of blocks
config: i386-randconfig-x016-201812 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        git checkout 8702a90d3c773f590c875d4300e751fce1780bbc
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   drivers//md/dm-verity-target.c: In function 'verity_verify_io':
>> drivers//md/dm-verity-target.c:560:22: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
     iodata->reqdata_arr = reqdata_arr;
                         ^
   cc1: some warnings being treated as errors

vim +560 drivers//md/dm-verity-target.c

   533	
   534	static void verity_release_req(struct dm_verity_io_data *iodata)
   535	{
   536		kfree(iodata->reqdata_arr);
   537		kfree(iodata);
   538	}
   539	/*
   540	 * Verify one "dm_verity_io" structure.
   541	 */
   542	static void verity_verify_io(struct dm_verity_io *io)
   543	{
   544		bool is_zero;
   545		struct dm_verity *v = io->v;
   546		unsigned int b = 0, blocks = 0;
   547		struct dm_verity_io_data *iodata = NULL;
   548		struct dm_verity_req_data *reqdata_arr = NULL;
   549		struct scatterlist *sg = NULL;
   550		int r;
   551	
   552		iodata = kmalloc(sizeof(*iodata), GFP_NOIO);
   553		reqdata_arr = kmalloc_array(io->n_blocks,
   554					    sizeof(struct dm_verity_req_data), GFP_NOIO);
   555		if (unlikely((iodata == NULL) || (reqdata_arr == NULL))) {
   556			WARN_ON((iodata == NULL) || (reqdata_arr == NULL));
   557			goto err_memfree;
   558		}
   559		atomic_set(&iodata->expected_reqs, io->n_blocks);
 > 560		iodata->reqdata_arr = reqdata_arr;
   561		iodata->io = io;
   562		iodata->total_reqs = blocks = io->n_blocks;
   563	
   564		for (b = 0; b < blocks; b++) {
   565			unsigned int nents;
   566			unsigned int total_len = 0;
   567			unsigned int num_of_buffs = 0;
   568			sector_t cur_block = io->block + b;
   569	
   570			if (v->validated_blocks &&
   571			    likely(test_bit(cur_block, v->validated_blocks))) {
   572				verity_bv_skip_block(v, io, &io->iter);
   573				continue;
   574			}
   575	
   576			reqdata_arr[b].req = ahash_request_alloc(v->tfm, GFP_NOIO);
   577			if (unlikely(reqdata_arr[b].req == NULL))
   578				goto err_memfree;
   579			ahash_request_set_tfm(reqdata_arr[b].req, v->tfm);
   580	
   581			/* +1 for the salt buffer */
   582			num_of_buffs = verity_calc_buffs_for_bv(v, io, &io->iter) + 1;
   583			WARN_ON(num_of_buffs < 1);
   584			sg = kmalloc_array(num_of_buffs, sizeof(struct scatterlist),
   585					   GFP_NOIO);
   586			if (!sg) {
   587				DMERR_LIMIT("%s: kmalloc_array failed", __func__);
   588				goto err_memfree;
   589			}
   590			sg_init_table(sg, num_of_buffs);
   591			// FIXME: if we 'err_memfree' (or continue;) below how does this sg get kfree()'d?
   592	
   593			r = verity_hash_for_block(v, io, cur_block,
   594						  reqdata_arr[b].want_digest,
   595						  &reqdata_arr[b].fec_io, &is_zero);
   596			if (unlikely(r < 0))
   597				goto err_memfree;
   598	
   599			if (is_zero) {
   600				/*
   601				 * If we expect a zero block, don't validate, just
   602				 * return zeroes.
   603				 */
   604				r = verity_for_bv_block(v, io, &io->iter,
   605							verity_bv_zero);
   606				if (unlikely(r < 0))
   607					goto err_memfree;
   608				verity_cb_complete(iodata, r);
   609				continue;
   610			}
   611	
   612			nents = 0;
   613			total_len = 0;
   614			if (verity_is_salt_required(v, START_SG))
   615				verity_add_salt(v, sg, &nents, &total_len);
   616	
   617			verity_for_io_block(v, io, &io->iter, sg, &nents, &total_len);
   618			if (verity_is_salt_required(v, END_SG))
   619				verity_add_salt(v, sg, &nents, &total_len);
   620	
   621			reqdata_arr[b].iodata = iodata;
   622			reqdata_arr[b].sg = sg;
   623			reqdata_arr[b].digest_size = v->digest_size;
   624			reqdata_arr[b].iblock = b;
   625			/*
   626			 * Need to mark end of chain, since we might
   627			 * have allocated more than we actually use.
   628			 */
   629			sg_mark_end(&sg[nents-1]);
   630	
   631			ahash_request_set_tfm(reqdata_arr[b].req, v->tfm);
   632			ahash_request_set_callback(reqdata_arr[b].req,
   633						   CRYPTO_TFM_REQ_MAY_SLEEP |
   634						   CRYPTO_TFM_REQ_MAY_BACKLOG,
   635						   single_block_req_done, &reqdata_arr[b]);
   636			ahash_request_set_crypt(reqdata_arr[b].req, sg,
   637						reqdata_arr[b].real_digest, total_len);
   638			r = crypto_ahash_digest(reqdata_arr[b].req);
   639			if (r == 0) {
   640				/* digest completed already, callback won't be called. */
   641				__single_block_req_done(&reqdata_arr[b], r);
   642			}
   643		}
   644		return;
   645	
   646	err_memfree:
   647		/*
   648		 * reduce expected requests by the number of unsent
   649		 * requests, -1 accounting for the current block
   650		 */
   651		atomic_sub(blocks - b - 1, &iodata->expected_reqs);
   652		verity_cb_complete(iodata, -EIO);
   653	}
   654	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 30551 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20180327/47afbe2a/attachment.gz>


More information about the dm-devel mailing list