[android-common:mirror-chromeos-5.10-arcvm 1/1] fs/erofs/decompressor_lzma.c:266:12: error: implicit declaration of function 'xz_dec_microlzma_run'

kernel test robot <[email protected]>
Newsgroups dev.linux.lists.oe-kbuild-all
Message-ID <[email protected]>
Hi Gao,

FYI, the error/warning still remains.

tree:   https://android.googlesource.com/kernel/common mirror-chromeos-5.10-arcvm
head:   8b4ccabf3e6b7ef8ad04f513e8e5b1a5a1021267
commit: ede603374aab4bb8a612fd3c1c84ceef11435fa1 [1/1] FROMGIT: erofs: lzma compression support
config: x86_64-randconfig-r071-20260815 (https://download.01.org/0day-ci/archive/20260815/[email protected]/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 844a18e753e822736c9805ab779144b647a2c186)
smatch: v0.5.0-9187-g5189e3fb
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260815/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

   In file included from <built-in>:2:
   In file included from include/linux/compiler_types.h:69:
   include/linux/compiler-clang.h:34:9: warning: '__SANITIZE_ADDRESS__' macro redefined [-Wmacro-redefined]
      34 | #define __SANITIZE_ADDRESS__
         |         ^
   <built-in>:357:9: note: previous definition is here
     357 | #define __SANITIZE_ADDRESS__ 1
         |         ^
   fs/erofs/decompressor_lzma.c:42:5: error: implicit declaration of function 'xz_dec_microlzma_end' [-Werror,-Wimplicit-function-declaration]
      42 |                                 xz_dec_microlzma_end(strm->state);
         |                                 ^
   fs/erofs/decompressor_lzma.c:135:4: error: implicit declaration of function 'xz_dec_microlzma_end' [-Werror,-Wimplicit-function-declaration]
     135 |                         xz_dec_microlzma_end(strm->state);
         |                         ^
   fs/erofs/decompressor_lzma.c:136:17: error: implicit declaration of function 'xz_dec_microlzma_alloc' [-Werror,-Wimplicit-function-declaration]
     136 |                 strm->state = xz_dec_microlzma_alloc(XZ_PREALLOC, dict_size);
         |                               ^
   fs/erofs/decompressor_lzma.c:136:15: error: incompatible integer to pointer conversion assigning to 'struct xz_dec_microlzma *' from 'int' [-Wint-conversion]
     136 |                 strm->state = xz_dec_microlzma_alloc(XZ_PREALLOC, dict_size);
         |                             ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/erofs/decompressor_lzma.c:193:2: error: implicit declaration of function 'xz_dec_microlzma_reset' [-Werror,-Wimplicit-function-declaration]
     193 |         xz_dec_microlzma_reset(strm->state, inlen, outlen,
         |         ^
>> fs/erofs/decompressor_lzma.c:266:12: error: implicit declaration of function 'xz_dec_microlzma_run' [-Werror,-Wimplicit-function-declaration]
     266 |                 xz_err = xz_dec_microlzma_run(strm->state, &strm->buf);
         |                          ^
   1 warning and 6 errors generated.


vim +/xz_dec_microlzma_run +266 fs/erofs/decompressor_lzma.c

   151	
   152	int z_erofs_lzma_decompress(struct z_erofs_decompress_req *rq,
   153				    struct list_head *pagepool)
   154	{
   155		const unsigned int nrpages_out =
   156			PAGE_ALIGN(rq->pageofs_out + rq->outputsize) >> PAGE_SHIFT;
   157		const unsigned int nrpages_in =
   158			PAGE_ALIGN(rq->inputsize) >> PAGE_SHIFT;
   159		unsigned int inputmargin, inlen, outlen, pageofs;
   160		struct z_erofs_lzma *strm;
   161		u8 *kin;
   162		bool bounced = false;
   163		int no, ni, j, err = 0;
   164	
   165		/* 1. get the exact LZMA compressed size */
   166		kin = kmap(*rq->in);
   167		inputmargin = 0;
   168		while (!kin[inputmargin & ~PAGE_MASK])
   169			if (!(++inputmargin & ~PAGE_MASK))
   170				break;
   171	
   172		if (inputmargin >= PAGE_SIZE) {
   173			kunmap(*rq->in);
   174			return -EFSCORRUPTED;
   175		}
   176		rq->inputsize -= inputmargin;
   177	
   178		/* 2. get an available lzma context */
   179	again:
   180		spin_lock(&z_erofs_lzma_lock);
   181		strm = z_erofs_lzma_head;
   182		if (!strm) {
   183			spin_unlock(&z_erofs_lzma_lock);
   184			wait_event(z_erofs_lzma_wq, READ_ONCE(z_erofs_lzma_head));
   185			goto again;
   186		}
   187		z_erofs_lzma_head = strm->next;
   188		spin_unlock(&z_erofs_lzma_lock);
   189	
   190		/* 3. multi-call decompress */
   191		inlen = rq->inputsize;
   192		outlen = rq->outputsize;
   193		xz_dec_microlzma_reset(strm->state, inlen, outlen,
   194				       !rq->partial_decoding);
   195		pageofs = rq->pageofs_out;
   196		strm->buf.in = kin + inputmargin;
   197		strm->buf.in_pos = 0;
   198		strm->buf.in_size = min_t(u32, inlen, PAGE_SIZE - inputmargin);
   199		inlen -= strm->buf.in_size;
   200		strm->buf.out = NULL;
   201		strm->buf.out_pos = 0;
   202		strm->buf.out_size = 0;
   203	
   204		for (ni = 0, no = -1;;) {
   205			enum xz_ret xz_err;
   206	
   207			if (strm->buf.out_pos == strm->buf.out_size) {
   208				if (strm->buf.out) {
   209					kunmap(rq->out[no]);
   210					strm->buf.out = NULL;
   211				}
   212	
   213				if (++no >= nrpages_out || !outlen) {
   214					erofs_err(rq->sb, "decompressed buf out of bound");
   215					err = -EFSCORRUPTED;
   216					break;
   217				}
   218				strm->buf.out_pos = 0;
   219				strm->buf.out_size = min_t(u32, outlen,
   220							   PAGE_SIZE - pageofs);
   221				outlen -= strm->buf.out_size;
   222				if (rq->out[no])
   223					strm->buf.out = kmap(rq->out[no]) + pageofs;
   224				pageofs = 0;
   225			} else if (strm->buf.in_pos == strm->buf.in_size) {
   226				kunmap(rq->in[ni]);
   227	
   228				if (++ni >= nrpages_in || !inlen) {
   229					erofs_err(rq->sb, "compressed buf out of bound");
   230					err = -EFSCORRUPTED;
   231					break;
   232				}
   233				strm->buf.in_pos = 0;
   234				strm->buf.in_size = min_t(u32, inlen, PAGE_SIZE);
   235				inlen -= strm->buf.in_size;
   236				kin = kmap(rq->in[ni]);
   237				strm->buf.in = kin;
   238				bounced = false;
   239			}
   240	
   241			/*
   242			 * Handle overlapping: Use bounced buffer if the compressed
   243			 * data is under processing; Otherwise, Use short-lived pages
   244			 * from the on-stack pagepool where pages share with the same
   245			 * request.
   246			 */
   247			if (!bounced && rq->out[no] == rq->in[ni]) {
   248				memcpy(strm->bounce, strm->buf.in, strm->buf.in_size);
   249				strm->buf.in = strm->bounce;
   250				bounced = true;
   251			}
   252			for (j = ni + 1; j < nrpages_in; ++j) {
   253				struct page *tmppage;
   254	
   255				if (rq->out[no] != rq->in[j])
   256					continue;
   257	
   258				DBG_BUGON(erofs_page_is_managed(EROFS_SB(rq->sb),
   259								rq->in[j]));
   260				tmppage = erofs_allocpage(pagepool,
   261							  GFP_KERNEL | __GFP_NOFAIL);
   262				set_page_private(tmppage, Z_EROFS_SHORTLIVED_PAGE);
   263				copy_highpage(tmppage, rq->in[j]);
   264				rq->in[j] = tmppage;
   265			}
 > 266			xz_err = xz_dec_microlzma_run(strm->state, &strm->buf);

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.