* [linux-next:master 7388/9759] mm/shmem.c:1316:16: warning: Value stored to 'folio' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
@ 2022-05-08 13:02 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-05-08 13:02 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 26787 bytes --]
CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: Linux Memory Management List <linux-mm@kvack.org>
TO: "Matthew Wilcox (Oracle)" <willy@infradead.org>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 38a288f5941ef03752887ad86f2d85442358c99a
commit: b5a5d07ad0bbab66e0d24f93860423361d763453 [7388/9759] swap: turn get_swap_page() into folio_alloc_swap()
:::::: branch date: 2 days ago
:::::: commit date: 9 days ago
config: mips-randconfig-c004-20220508 (https://download.01.org/0day-ci/archive/20220508/202205082108.s73LU6wD-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project af4cf1c6b8ed0d8102fc5e69acdc2fcbbcdaa9a7)
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 mips cross compiling tool for clang build
# apt-get install binutils-mips-linux-gnu
# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=b5a5d07ad0bbab66e0d24f93860423361d763453
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 b5a5d07ad0bbab66e0d24f93860423361d763453
# save the config file
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips clang-analyzer
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:265:2: note: expanded from macro '__fortify_memset_chk'
__underlying_memset(p, c, __fortify_size); \
^~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:47:29: note: expanded from macro '__underlying_memset'
#define __underlying_memset __builtin_memset
^~~~~~~~~~~~~~~~
drivers/pinctrl/pinctrl-utils.c:48:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
memset(new_map + old_num, 0, (new_num - old_num) * sizeof(*new_map));
^
include/linux/fortify-string.h:272:25: note: expanded from macro 'memset'
#define memset(p, c, s) __fortify_memset_chk(p, c, s, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:265:2: note: expanded from macro '__fortify_memset_chk'
__underlying_memset(p, c, __fortify_size); \
^~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:47:29: note: expanded from macro '__underlying_memset'
#define __underlying_memset __builtin_memset
^~~~~~~~~~~~~~~~
Suppressed 37 warnings (37 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
37 warnings generated.
Suppressed 37 warnings (37 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
37 warnings generated.
Suppressed 37 warnings (37 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
37 warnings generated.
Suppressed 37 warnings (37 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
37 warnings generated.
Suppressed 37 warnings (37 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
37 warnings generated.
Suppressed 37 warnings (37 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
38 warnings generated.
drivers/gpio/gpio-tqmx86.c:318:27: warning: Access to field 'domain' results in a dereference of an undefined pointer value (loaded from variable 'girq') [clang-analyzer-core.NullDereference]
irq_domain_set_pm_device(girq->domain, dev);
^~~~
drivers/gpio/gpio-tqmx86.c:234:2: note: 'girq' declared without an initial value
struct gpio_irq_chip *girq;
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpio/gpio-tqmx86.c:240:6: note: Assuming 'irq' is >= 0
if (irq < 0 && irq != -ENXIO)
^~~~~~~
drivers/gpio/gpio-tqmx86.c:240:14: note: Left side of '&&' is false
if (irq < 0 && irq != -ENXIO)
^
drivers/gpio/gpio-tqmx86.c:244:6: note: Assuming 'res' is non-null
if (!res) {
^~~~
drivers/gpio/gpio-tqmx86.c:244:2: note: Taking false branch
if (!res) {
^
drivers/gpio/gpio-tqmx86.c:250:6: note: Assuming 'io_base' is non-null
if (!io_base)
^~~~~~~~
drivers/gpio/gpio-tqmx86.c:250:2: note: Taking false branch
if (!io_base)
^
drivers/gpio/gpio-tqmx86.c:254:6: note: Assuming 'gpio' is non-null
if (!gpio)
^~~~~
drivers/gpio/gpio-tqmx86.c:254:2: note: Taking false branch
if (!gpio)
^
drivers/gpio/gpio-tqmx86.c:257:2: note: Loop condition is false. Exiting loop
raw_spin_lock_init(&gpio->spinlock);
^
include/linux/spinlock.h:102:39: note: expanded from macro 'raw_spin_lock_init'
# define raw_spin_lock_init(lock) \
^
drivers/gpio/gpio-tqmx86.c:279:6: note: Assuming 'irq' is <= 0
if (irq > 0) {
^~~~~~~
drivers/gpio/gpio-tqmx86.c:279:2: note: Taking false branch
if (irq > 0) {
^
drivers/gpio/gpio-tqmx86.c:313:6: note: Assuming 'ret' is 0
if (ret) {
^~~
drivers/gpio/gpio-tqmx86.c:313:2: note: Taking false branch
if (ret) {
^
drivers/gpio/gpio-tqmx86.c:318:27: note: Access to field 'domain' results in a dereference of an undefined pointer value (loaded from variable 'girq')
irq_domain_set_pm_device(girq->domain, dev);
^~~~
Suppressed 37 warnings (37 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
46 warnings generated.
Suppressed 46 warnings (46 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
37 warnings generated.
Suppressed 37 warnings (37 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
46 warnings generated.
Suppressed 46 warnings (46 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
51 warnings generated.
>> mm/shmem.c:1316:16: warning: Value stored to 'folio' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
struct folio *folio = page_folio(page);
^~~~~
mm/shmem.c:1316:16: note: Value stored to 'folio' during its initialization is never read
struct folio *folio = page_folio(page);
^~~~~
mm/shmem.c:1338:2: warning: Value stored to 'index' is never read [clang-analyzer-deadcode.DeadStores]
index = page->index;
^ ~~~~~~~~~~~
mm/shmem.c:1338:2: note: Value stored to 'index' is never read
index = page->index;
^ ~~~~~~~~~~~
mm/shmem.c:1530:24: warning: Value stored to 'mapping' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
struct address_space *mapping = info->vfs_inode.i_mapping;
^~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
mm/shmem.c:1530:24: note: Value stored to 'mapping' during its initialization is never read
struct address_space *mapping = info->vfs_inode.i_mapping;
^~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
mm/shmem.c:2269:3: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
memset(info, 0, (char *)inode - (char *)info);
^
include/linux/fortify-string.h:272:25: note: expanded from macro 'memset'
#define memset(p, c, s) __fortify_memset_chk(p, c, s, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:265:2: note: expanded from macro '__fortify_memset_chk'
__underlying_memset(p, c, __fortify_size); \
^~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:47:29: note: expanded from macro '__underlying_memset'
#define __underlying_memset __builtin_memset
^~~~~~~~~~~~~~~~
mm/shmem.c:2269:3: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
memset(info, 0, (char *)inode - (char *)info);
^
include/linux/fortify-string.h:272:25: note: expanded from macro 'memset'
#define memset(p, c, s) __fortify_memset_chk(p, c, s, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:265:2: note: expanded from macro '__fortify_memset_chk'
__underlying_memset(p, c, __fortify_size); \
^~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:47:29: note: expanded from macro '__underlying_memset'
#define __underlying_memset __builtin_memset
^~~~~~~~~~~~~~~~
Suppressed 47 warnings (46 in non-user code, 1 with check filters).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
51 warnings generated.
mm/util.c:63:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
memcpy(buf, s, len);
^
include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy'
#define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk'
__underlying_##op(p, q, __fortify_size); \
^~~~~~~~~~~~~~~~~
note: expanded from here
include/linux/fortify-string.h:45:29: note: expanded from macro '__underlying_memcpy'
#define __underlying_memcpy __builtin_memcpy
^~~~~~~~~~~~~~~~
mm/util.c:63:3: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
memcpy(buf, s, len);
^
include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy'
#define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk'
__underlying_##op(p, q, __fortify_size); \
^~~~~~~~~~~~~~~~~
note: expanded from here
include/linux/fortify-string.h:45:29: note: expanded from macro '__underlying_memcpy'
#define __underlying_memcpy __builtin_memcpy
^~~~~~~~~~~~~~~~
mm/util.c:109:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
memcpy(buf, s, len);
^
include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy'
#define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk'
__underlying_##op(p, q, __fortify_size); \
^~~~~~~~~~~~~~~~~
note: expanded from here
include/linux/fortify-string.h:45:29: note: expanded from macro '__underlying_memcpy'
#define __underlying_memcpy __builtin_memcpy
^~~~~~~~~~~~~~~~
mm/util.c:109:3: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
memcpy(buf, s, len);
^
include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy'
#define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk'
__underlying_##op(p, q, __fortify_size); \
^~~~~~~~~~~~~~~~~
note: expanded from here
include/linux/fortify-string.h:45:29: note: expanded from macro '__underlying_memcpy'
#define __underlying_memcpy __builtin_memcpy
^~~~~~~~~~~~~~~~
mm/util.c:131:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
memcpy(p, src, len);
^
include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy'
vim +/folio +1316 mm/shmem.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 1310
^1da177e4c3f41 Linus Torvalds 2005-04-16 1311 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 1312 * Move the page from the page cache to the swap cache.
^1da177e4c3f41 Linus Torvalds 2005-04-16 1313 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 1314 static int shmem_writepage(struct page *page, struct writeback_control *wbc)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1315 {
b5a5d07ad0bbab Matthew Wilcox (Oracle 2022-04-29 @1316) struct folio *folio = page_folio(page);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1317 struct shmem_inode_info *info;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1318 struct address_space *mapping;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1319 struct inode *inode;
6922c0c7abd387 Hugh Dickins 2011-08-03 1320 swp_entry_t swap;
6922c0c7abd387 Hugh Dickins 2011-08-03 1321 pgoff_t index;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1322
1e6decf30af5c5 Hugh Dickins 2021-09-02 1323 /*
1e6decf30af5c5 Hugh Dickins 2021-09-02 1324 * If /sys/kernel/mm/transparent_hugepage/shmem_enabled is "always" or
1e6decf30af5c5 Hugh Dickins 2021-09-02 1325 * "force", drivers/gpu/drm/i915/gem/i915_gem_shmem.c gets huge pages,
1e6decf30af5c5 Hugh Dickins 2021-09-02 1326 * and its shmem_writeback() needs them to be split when swapping.
1e6decf30af5c5 Hugh Dickins 2021-09-02 1327 */
1e6decf30af5c5 Hugh Dickins 2021-09-02 1328 if (PageTransCompound(page)) {
1e6decf30af5c5 Hugh Dickins 2021-09-02 1329 /* Ensure the subpages are still dirty */
1e6decf30af5c5 Hugh Dickins 2021-09-02 1330 SetPageDirty(page);
1e6decf30af5c5 Hugh Dickins 2021-09-02 1331 if (split_huge_page(page) < 0)
1e6decf30af5c5 Hugh Dickins 2021-09-02 1332 goto redirty;
1e6decf30af5c5 Hugh Dickins 2021-09-02 1333 ClearPageDirty(page);
1e6decf30af5c5 Hugh Dickins 2021-09-02 1334 }
1e6decf30af5c5 Hugh Dickins 2021-09-02 1335
^1da177e4c3f41 Linus Torvalds 2005-04-16 1336 BUG_ON(!PageLocked(page));
^1da177e4c3f41 Linus Torvalds 2005-04-16 1337 mapping = page->mapping;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1338 index = page->index;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1339 inode = mapping->host;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1340 info = SHMEM_I(inode);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1341 if (info->flags & VM_LOCKED)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1342 goto redirty;
d9fe526a83b84e Hugh Dickins 2008-02-04 1343 if (!total_swap_pages)
^1da177e4c3f41 Linus Torvalds 2005-04-16 1344 goto redirty;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1345
d9fe526a83b84e Hugh Dickins 2008-02-04 1346 /*
97b713ba3ebaa6 Christoph Hellwig 2015-01-14 1347 * Our capabilities prevent regular writeback or sync from ever calling
97b713ba3ebaa6 Christoph Hellwig 2015-01-14 1348 * shmem_writepage; but a stacking filesystem might use ->writepage of
97b713ba3ebaa6 Christoph Hellwig 2015-01-14 1349 * its underlying filesystem, in which case tmpfs should write out to
97b713ba3ebaa6 Christoph Hellwig 2015-01-14 1350 * swap only in response to memory pressure, and not for the writeback
97b713ba3ebaa6 Christoph Hellwig 2015-01-14 1351 * threads or sync.
d9fe526a83b84e Hugh Dickins 2008-02-04 1352 */
48f170fb7d7db8 Hugh Dickins 2011-07-25 1353 if (!wbc->for_reclaim) {
48f170fb7d7db8 Hugh Dickins 2011-07-25 1354 WARN_ON_ONCE(1); /* Still happens? Tell us about it! */
48f170fb7d7db8 Hugh Dickins 2011-07-25 1355 goto redirty;
48f170fb7d7db8 Hugh Dickins 2011-07-25 1356 }
1635f6a74152f1 Hugh Dickins 2012-05-29 1357
1635f6a74152f1 Hugh Dickins 2012-05-29 1358 /*
1635f6a74152f1 Hugh Dickins 2012-05-29 1359 * This is somewhat ridiculous, but without plumbing a SWAP_MAP_FALLOC
1635f6a74152f1 Hugh Dickins 2012-05-29 1360 * value into swapfile.c, the only way we can correctly account for a
1635f6a74152f1 Hugh Dickins 2012-05-29 1361 * fallocated page arriving here is now to initialize it and write it.
1aac1400319d30 Hugh Dickins 2012-05-29 1362 *
1aac1400319d30 Hugh Dickins 2012-05-29 1363 * That's okay for a page already fallocated earlier, but if we have
1aac1400319d30 Hugh Dickins 2012-05-29 1364 * not yet completed the fallocation, then (a) we want to keep track
1aac1400319d30 Hugh Dickins 2012-05-29 1365 * of this page in case we have to undo it, and (b) it may not be a
1aac1400319d30 Hugh Dickins 2012-05-29 1366 * good idea to continue anyway, once we're pushing into swap. So
1aac1400319d30 Hugh Dickins 2012-05-29 1367 * reactivate the page, and let shmem_fallocate() quit when too many.
1635f6a74152f1 Hugh Dickins 2012-05-29 1368 */
1635f6a74152f1 Hugh Dickins 2012-05-29 1369 if (!PageUptodate(page)) {
1aac1400319d30 Hugh Dickins 2012-05-29 1370 if (inode->i_private) {
1aac1400319d30 Hugh Dickins 2012-05-29 1371 struct shmem_falloc *shmem_falloc;
1aac1400319d30 Hugh Dickins 2012-05-29 1372 spin_lock(&inode->i_lock);
1aac1400319d30 Hugh Dickins 2012-05-29 1373 shmem_falloc = inode->i_private;
1aac1400319d30 Hugh Dickins 2012-05-29 1374 if (shmem_falloc &&
8e205f779d1443 Hugh Dickins 2014-07-23 1375 !shmem_falloc->waitq &&
1aac1400319d30 Hugh Dickins 2012-05-29 1376 index >= shmem_falloc->start &&
1aac1400319d30 Hugh Dickins 2012-05-29 1377 index < shmem_falloc->next)
1aac1400319d30 Hugh Dickins 2012-05-29 1378 shmem_falloc->nr_unswapped++;
1aac1400319d30 Hugh Dickins 2012-05-29 1379 else
1aac1400319d30 Hugh Dickins 2012-05-29 1380 shmem_falloc = NULL;
1aac1400319d30 Hugh Dickins 2012-05-29 1381 spin_unlock(&inode->i_lock);
1aac1400319d30 Hugh Dickins 2012-05-29 1382 if (shmem_falloc)
1aac1400319d30 Hugh Dickins 2012-05-29 1383 goto redirty;
1aac1400319d30 Hugh Dickins 2012-05-29 1384 }
1635f6a74152f1 Hugh Dickins 2012-05-29 1385 clear_highpage(page);
1635f6a74152f1 Hugh Dickins 2012-05-29 1386 flush_dcache_page(page);
1635f6a74152f1 Hugh Dickins 2012-05-29 1387 SetPageUptodate(page);
1635f6a74152f1 Hugh Dickins 2012-05-29 1388 }
1635f6a74152f1 Hugh Dickins 2012-05-29 1389
b5a5d07ad0bbab Matthew Wilcox (Oracle 2022-04-29 1390) swap = folio_alloc_swap(folio);
48f170fb7d7db8 Hugh Dickins 2011-07-25 1391 if (!swap.val)
48f170fb7d7db8 Hugh Dickins 2011-07-25 1392 goto redirty;
d9fe526a83b84e Hugh Dickins 2008-02-04 1393
b1dea800ac3959 Hugh Dickins 2011-05-11 1394 /*
b1dea800ac3959 Hugh Dickins 2011-05-11 1395 * Add inode to shmem_unuse()'s list of swapped-out inodes,
6922c0c7abd387 Hugh Dickins 2011-08-03 1396 * if it's not already there. Do it now before the page is
6922c0c7abd387 Hugh Dickins 2011-08-03 1397 * moved to swap cache, when its pagelock no longer protects
b1dea800ac3959 Hugh Dickins 2011-05-11 1398 * the inode from eviction. But don't unlock the mutex until
6922c0c7abd387 Hugh Dickins 2011-08-03 1399 * we've incremented swapped, because shmem_unuse_inode() will
6922c0c7abd387 Hugh Dickins 2011-08-03 1400 * prune a !swapped inode from the swaplist under this mutex.
b1dea800ac3959 Hugh Dickins 2011-05-11 1401 */
b1dea800ac3959 Hugh Dickins 2011-05-11 1402 mutex_lock(&shmem_swaplist_mutex);
05bf86b4ccfd0f Hugh Dickins 2011-05-14 1403 if (list_empty(&info->swaplist))
b56a2d8af9147a Vineeth Remanan Pillai 2019-03-05 1404 list_add(&info->swaplist, &shmem_swaplist);
b1dea800ac3959 Hugh Dickins 2011-05-11 1405
4afab1cd256e42 Yang Shi 2019-11-30 1406 if (add_to_swap_cache(page, swap,
3852f6768ede54 Joonsoo Kim 2020-08-11 1407 __GFP_HIGH | __GFP_NOMEMALLOC | __GFP_NOWARN,
3852f6768ede54 Joonsoo Kim 2020-08-11 1408 NULL) == 0) {
4595ef88d13613 Kirill A. Shutemov 2016-07-26 1409 spin_lock_irq(&info->lock);
6922c0c7abd387 Hugh Dickins 2011-08-03 1410 shmem_recalc_inode(inode);
267a4c76bbdb95 Hugh Dickins 2015-12-11 1411 info->swapped++;
4595ef88d13613 Kirill A. Shutemov 2016-07-26 1412 spin_unlock_irq(&info->lock);
6922c0c7abd387 Hugh Dickins 2011-08-03 1413
267a4c76bbdb95 Hugh Dickins 2015-12-11 1414 swap_shmem_alloc(swap);
267a4c76bbdb95 Hugh Dickins 2015-12-11 1415 shmem_delete_from_page_cache(page, swp_to_radix_entry(swap));
267a4c76bbdb95 Hugh Dickins 2015-12-11 1416
6922c0c7abd387 Hugh Dickins 2011-08-03 1417 mutex_unlock(&shmem_swaplist_mutex);
d9fe526a83b84e Hugh Dickins 2008-02-04 1418 BUG_ON(page_mapped(page));
9fab5619bdd7f8 Hugh Dickins 2009-03-31 1419 swap_writepage(page, wbc);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1420 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1421 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1422
6922c0c7abd387 Hugh Dickins 2011-08-03 1423 mutex_unlock(&shmem_swaplist_mutex);
75f6d6d29a40b5 Minchan Kim 2017-07-06 1424 put_swap_page(page, swap);
^1da177e4c3f41 Linus Torvalds 2005-04-16 1425 redirty:
^1da177e4c3f41 Linus Torvalds 2005-04-16 1426 set_page_dirty(page);
d9fe526a83b84e Hugh Dickins 2008-02-04 1427 if (wbc->for_reclaim)
d9fe526a83b84e Hugh Dickins 2008-02-04 1428 return AOP_WRITEPAGE_ACTIVATE; /* Return with page locked */
d9fe526a83b84e Hugh Dickins 2008-02-04 1429 unlock_page(page);
d9fe526a83b84e Hugh Dickins 2008-02-04 1430 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 1431 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 1432
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-05-08 13:02 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-08 13:02 [linux-next:master 7388/9759] mm/shmem.c:1316:16: warning: Value stored to 'folio' during its initialization is never read [clang-analyzer-deadcode.DeadStores] 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.