All of lore.kernel.org
 help / color / mirror / Atom feed
* [dm:dm-4.17 25/25] drivers//md/dm-verity-target.c:560:22: error: assignment from incompatible pointer type
@ 2018-03-26 22:34 kbuild test robot
  2018-03-26 23:06 ` Mike Snitzer
  0 siblings, 1 reply; 2+ messages in thread
From: kbuild test robot @ 2018-03-26 22:34 UTC (permalink / raw)
  To: yaeceh01; +Cc: Gilad Ben-Yossef, dm-devel, kbuild-all, Mike Snitzer

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

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

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

[-- Attachment #3: Type: text/plain, Size: 0 bytes --]



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

* Re: [dm:dm-4.17 25/25] drivers//md/dm-verity-target.c:560:22: error: assignment from incompatible pointer type
  2018-03-26 22:34 [dm:dm-4.17 25/25] drivers//md/dm-verity-target.c:560:22: error: assignment from incompatible pointer type kbuild test robot
@ 2018-03-26 23:06 ` Mike Snitzer
  0 siblings, 0 replies; 2+ messages in thread
From: Mike Snitzer @ 2018-03-26 23:06 UTC (permalink / raw)
  To: kbuild test robot; +Cc: Gilad Ben-Yossef, dm-devel, kbuild-all, yaeceh01

I've since fixed this up.. but I'll respond to the previous posted
patches with additional context on what I changed.

I also have a request about how the sg array is freed on the error path.

Mike

On Mon, Mar 26 2018 at  6:34pm -0400,
kbuild test robot <fengguang.wu@intel.com> wrote:

> 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

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

end of thread, other threads:[~2018-03-26 23:06 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-26 22:34 [dm:dm-4.17 25/25] drivers//md/dm-verity-target.c:560:22: error: assignment from incompatible pointer type kbuild test robot
2018-03-26 23:06 ` Mike Snitzer

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.