To illustrate this problem, I created the following example:
Assuming that the process reads sequentially from the beginning of the
file and
calls the `page_cache_sync_readahead` function. In this sync readahead
function,
since the index is 0, it will proceed to `initial_readahead` and initialize
`ra_state`. It allocates a folio with an order of 2 and marks it as
PG_readahead.
Next, because` (folio_test_readahead(folio))` is true, the
page_cache_async_ra
function is called, which causes the `ra_state` to be initialized again.