[bug report] mm/mglru: fix underprotected page cache

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Yu Zhao,

The patch 081488051d28: "mm/mglru: fix underprotected page cache"
from Dec 7, 2023 (linux-next), leads to the following Smatch static
checker warning:

	mm/workingset.c:318 lru_gen_refault()
	warn: always true condition '(refs >= ((((1))) << (__builtin_choose_expr((4 == 4), (((2) < (64 - 26 - 3 - 3 - 0 - 10 - 0 - (8 + 14))) ?(2):(64 - 26 - 3 - 3 - 0 - 10 - 0 - (8 + 14))), ))) - 1) => (s32min-s32max >= 0)'

mm/workingset.c
    308         atomic_long_add(delta, &lrugen->refaulted[hist][type][tier]);
    309         mod_lruvec_state(lruvec, WORKINGSET_ACTIVATE_BASE + type, delta);
    310 
    311         /*
    312          * Count the following two cases as stalls:
    313          * 1. For pages accessed through page tables, hotter pages pushed out
    314          *    hot pages which refaulted immediately.
    315          * 2. For pages accessed multiple times through file descriptors,
    316          *    they would have been protected by sort_folio().
    317          */
--> 318         if (lru_gen_in_fault() || refs >= BIT(LRU_REFS_WIDTH) - 1) {
                                                  ^^^^^^^^^^^^^^^^^^^^^^^
In my x86 allmodconfig this is zero and refs is always >= 0.  This could
be intentional, but I thought it was worth checking.

    319                 set_mask_bits(&folio->flags, 0, LRU_REFS_MASK | BIT(PG_workingset));
    320                 mod_lruvec_state(lruvec, WORKINGSET_RESTORE_BASE + type, delta);
    321         }
    322 unlock:
    323         rcu_read_unlock();
    324 }

regards,
dan carpenter




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux