linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [linux-next:master 4504/4677] mm/zswap.c:947:17: warning: variable 'entry' is uninitialized when used here
@ 2021-01-20 18:51 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-01-20 18:51 UTC (permalink / raw)
  To: Tian Tao
  Cc: kbuild-all, clang-built-linux, Linux Memory Management List,
	Vitaly Wool, Andrew Morton

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   647060f3b592d3c8df0c85dd887557b03e6ea897
commit: 6753c561f6535d2261e531ea923f2c0b18208fe3 [4504/4677] mm/zswap: add the flag can_sleep_mapped
config: x86_64-randconfig-a016-20210119 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 22b68440e1647e16b5ee24b924986207173c02d1)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=6753c561f6535d2261e531ea923f2c0b18208fe3
        git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout 6753c561f6535d2261e531ea923f2c0b18208fe3
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

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

All warnings (new ones prefixed by >>):

>> mm/zswap.c:947:17: warning: variable 'entry' is uninitialized when used here [-Wuninitialized]
                   tmp = kmalloc(entry->length, GFP_ATOMIC);
                                 ^~~~~
   mm/zswap.c:933:27: note: initialize the variable 'entry' to silence this warning
           struct zswap_entry *entry;
                                    ^
                                     = NULL
>> mm/zswap.c:1271:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (!entry->length) {
               ^~~~~~~~~~~~~~
   mm/zswap.c:1322:9: note: uninitialized use occurs here
           return ret;
                  ^~~
   mm/zswap.c:1271:2: note: remove the 'if' if its condition is always false
           if (!entry->length) {
           ^~~~~~~~~~~~~~~~~~~~~
   mm/zswap.c:1259:9: note: initialize the variable 'ret' to silence this warning
           int ret;
                  ^
                   = 0
   2 warnings generated.


vim +/entry +947 mm/zswap.c

   914	
   915	/*
   916	 * Attempts to free an entry by adding a page to the swap cache,
   917	 * decompressing the entry data into the page, and issuing a
   918	 * bio write to write the page back to the swap device.
   919	 *
   920	 * This can be thought of as a "resumed writeback" of the page
   921	 * to the swap device.  We are basically resuming the same swap
   922	 * writeback path that was intercepted with the frontswap_store()
   923	 * in the first place.  After the page has been decompressed into
   924	 * the swap cache, the compressed version stored by zswap can be
   925	 * freed.
   926	 */
   927	static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
   928	{
   929		struct zswap_header *zhdr;
   930		swp_entry_t swpentry;
   931		struct zswap_tree *tree;
   932		pgoff_t offset;
   933		struct zswap_entry *entry;
   934		struct page *page;
   935		struct scatterlist input, output;
   936		struct crypto_acomp_ctx *acomp_ctx;
   937	
   938		u8 *src, *tmp;
   939		unsigned int dlen;
   940		int ret;
   941		struct writeback_control wbc = {
   942			.sync_mode = WB_SYNC_NONE,
   943		};
   944	
   945		if (!zpool_can_sleep_mapped(pool)) {
   946	
 > 947			tmp = kmalloc(entry->length, GFP_ATOMIC);
   948			if (!tmp)
   949				return -ENOMEM;
   950		}
   951	
   952		/* extract swpentry from data */
   953		zhdr = zpool_map_handle(pool, handle, ZPOOL_MM_RO);
   954		swpentry = zhdr->swpentry; /* here */
   955		tree = zswap_trees[swp_type(swpentry)];
   956		offset = swp_offset(swpentry);
   957	
   958		/* find and ref zswap entry */
   959		spin_lock(&tree->lock);
   960		entry = zswap_entry_find_get(&tree->rbroot, offset);
   961		if (!entry) {
   962			/* entry was invalidated */
   963			spin_unlock(&tree->lock);
   964			zpool_unmap_handle(pool, handle);
   965			return 0;
   966		}
   967		spin_unlock(&tree->lock);
   968		BUG_ON(offset != entry->offset);
   969	
   970		/* try to allocate swap cache page */
   971		switch (zswap_get_swap_cache_page(swpentry, &page)) {
   972		case ZSWAP_SWAPCACHE_FAIL: /* no memory or invalidate happened */
   973			ret = -ENOMEM;
   974			goto fail;
   975	
   976		case ZSWAP_SWAPCACHE_EXIST:
   977			/* page is already in the swap cache, ignore for now */
   978			put_page(page);
   979			ret = -EEXIST;
   980			goto fail;
   981	
   982		case ZSWAP_SWAPCACHE_NEW: /* page is locked */
   983			/* decompress */
   984			acomp_ctx = raw_cpu_ptr(entry->pool->acomp_ctx);
   985	
   986			dlen = PAGE_SIZE;
   987			src = (u8 *)zhdr + sizeof(struct zswap_header);
   988	
   989			if (!zpool_can_sleep_mapped(pool)) {
   990	
   991				memcpy(tmp, src, entry->length);
   992				src = tmp;
   993	
   994				zpool_unmap_handle(pool, handle);
   995			}
   996	
   997			mutex_lock(acomp_ctx->mutex);
   998			sg_init_one(&input, src, entry->length);
   999			sg_init_table(&output, 1);
  1000			sg_set_page(&output, page, PAGE_SIZE, 0);
  1001			acomp_request_set_params(acomp_ctx->req, &input, &output, entry->length, dlen);
  1002			ret = crypto_wait_req(crypto_acomp_decompress(acomp_ctx->req), &acomp_ctx->wait);
  1003			dlen = acomp_ctx->req->dlen;
  1004			mutex_unlock(acomp_ctx->mutex);
  1005	
  1006			BUG_ON(ret);
  1007			BUG_ON(dlen != PAGE_SIZE);
  1008	
  1009			/* page is up to date */
  1010			SetPageUptodate(page);
  1011		}
  1012	
  1013		/* move it to the tail of the inactive list after end_writeback */
  1014		SetPageReclaim(page);
  1015	
  1016		/* start writeback */
  1017		__swap_writepage(page, &wbc, end_swap_bio_write);
  1018		put_page(page);
  1019		zswap_written_back_pages++;
  1020	
  1021		spin_lock(&tree->lock);
  1022		/* drop local reference */
  1023		zswap_entry_put(tree, entry);
  1024	
  1025		/*
  1026		* There are two possible situations for entry here:
  1027		* (1) refcount is 1(normal case),  entry is valid and on the tree
  1028		* (2) refcount is 0, entry is freed and not on the tree
  1029		*     because invalidate happened during writeback
  1030		*  search the tree and free the entry if find entry
  1031		*/
  1032		if (entry == zswap_rb_search(&tree->rbroot, offset))
  1033			zswap_entry_put(tree, entry);
  1034		spin_unlock(&tree->lock);
  1035	
  1036		goto end;
  1037	
  1038		/*
  1039		* if we get here due to ZSWAP_SWAPCACHE_EXIST
  1040		* a load may be happening concurrently.
  1041		* it is safe and okay to not free the entry.
  1042		* if we free the entry in the following put
  1043		* it is also okay to return !0
  1044		*/
  1045	fail:
  1046		spin_lock(&tree->lock);
  1047		zswap_entry_put(tree, entry);
  1048		spin_unlock(&tree->lock);
  1049	
  1050	end:
  1051		if (zpool_can_sleep_mapped(pool))
  1052			zpool_unmap_handle(pool, handle);
  1053		else
  1054			kfree(tmp);
  1055	
  1056		return ret;
  1057	}
  1058	

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

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

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

only message in thread, other threads:[~2021-01-20 18:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-20 18:51 [linux-next:master 4504/4677] mm/zswap.c:947:17: warning: variable 'entry' is uninitialized when used here kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).