Matthew Wilcox (Oracle)
b9ff43dd27
mm/readahead: Fix readahead with large folios
...
Reading 100KB chunks from a big file (eg dd bs=100K) leads to poor
readahead behaviour. Studying the traces in detail, I noticed two
problems.
The first is that we were setting the readahead flag on the folio which
contains the last byte read from the block. This is wrong because we
will trigger readahead at the end of the read without waiting to see
if a subsequent read is going to use the pages we just read. Instead,
we need to set the readahead flag on the first folio _after_ the one
which contains the last byte that we're reading.
The second is that we were looking for the index of the folio with the
readahead flag set to exactly match the start + size - async_size.
If we've rounded this, either down (as previously) or up (as now),
we'll think we hit a folio marked as readahead by a different read,
and try to read the wrong pages. So round the expected index to the
order of the folio we hit.
Reported-by: Guo Xuenan <guoxuenan@huawei.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
2022-05-05 00:47:29 -04:00
..
2022-04-01 11:46:09 -07:00
2022-04-27 13:28:48 -07:00
2022-04-15 14:49:55 -07:00
2022-03-22 15:57:01 -07:00
2022-03-28 16:52:57 -04:00
2022-01-06 12:27:03 +01:00
2021-05-05 11:27:21 -07:00
2021-05-05 11:27:24 -07:00
2022-03-22 15:57:09 -07:00
2022-03-22 15:57:09 -07:00
2022-04-15 14:49:55 -07:00
2022-02-04 09:25:04 -08:00
2022-03-24 19:06:45 -07:00
2022-01-15 16:30:28 +02:00
2022-03-22 15:57:11 -07:00
2022-03-22 15:57:01 -07:00
2019-07-12 11:05:43 -07:00
2022-04-15 14:49:54 -07:00
2022-03-21 13:01:35 -04:00
2022-01-22 08:33:38 +02:00
2021-05-05 11:27:26 -07:00
2021-05-05 11:27:26 -07:00
2022-04-01 11:46:09 -07:00
2022-04-08 14:20:36 -10:00
2022-03-22 15:57:12 -07:00
2022-04-07 09:43:41 -04:00
2022-01-15 16:30:29 +02:00
2022-03-22 15:57:08 -07:00
2021-06-30 20:47:25 -07:00
2022-04-21 20:01:09 -07:00
2022-03-22 15:57:07 -07:00
2022-02-14 19:51:47 +01:00
2022-04-01 11:46:09 -07:00
2021-04-30 11:20:38 -07:00
2021-04-30 11:20:39 -07:00
2021-09-08 11:50:24 -07:00
2022-03-24 19:06:51 -07:00
2022-01-15 16:30:28 +02:00
2022-03-24 19:06:51 -07:00
2022-04-15 14:49:56 -07:00
2022-03-22 17:03:12 -07:00
2022-04-08 14:20:36 -10:00
2022-03-23 18:03:08 -07:00
2022-04-01 11:46:09 -07:00
2022-03-03 12:47:33 -05:00
2022-01-15 16:30:27 +02:00
2022-03-27 13:36:06 -07:00
2022-04-21 20:01:09 -07:00
2022-03-05 11:08:32 -08:00
2022-03-22 17:03:12 -07:00
2022-04-21 20:01:09 -07:00
2022-04-01 11:46:09 -07:00
2022-04-08 14:31:41 -10:00
2021-10-18 06:17:01 -06:00
2022-03-24 19:06:45 -07:00
2022-03-21 13:01:35 -04:00
2022-04-08 14:20:36 -10:00
2021-01-24 14:27:16 +01:00
2022-04-01 11:46:09 -07:00
2021-04-30 11:20:42 -07:00
2021-07-23 17:43:28 -07:00
2022-04-21 20:01:09 -07:00
2022-01-15 16:30:27 +02:00
2022-04-21 20:01:10 -07:00
2022-03-22 17:03:12 -07:00
2022-03-22 15:57:09 -07:00
2022-04-08 14:20:36 -10:00
2021-04-30 11:20:37 -07:00
2022-04-25 10:11:49 -07:00
2022-04-21 20:01:10 -07:00
2022-04-24 10:00:54 -07:00
2022-01-15 16:30:27 +02:00
2022-01-15 16:30:31 +02:00
2022-03-21 13:01:35 -04:00
2022-04-15 14:49:55 -07:00
2022-02-04 09:25:04 -08:00
2022-03-24 19:06:44 -07:00
2021-04-30 11:20:36 -07:00
2021-06-29 10:53:47 -07:00
2021-06-29 10:53:47 -07:00
2022-03-22 15:57:11 -07:00
2022-04-07 10:11:20 -04:00
2022-03-24 19:06:51 -07:00
2021-06-29 10:53:49 -07:00
2022-01-15 16:30:31 +02:00
2021-07-04 18:30:17 +00:00
2022-03-08 09:30:46 -05:00
2021-07-04 18:30:17 +00:00
2022-01-23 06:20:44 +02:00
2021-05-07 00:26:35 -07:00
2022-01-15 16:30:27 +02:00
2021-05-05 11:27:27 -07:00
2022-03-22 15:57:08 -07:00
2022-05-05 00:47:29 -04:00
2022-04-01 11:46:09 -07:00
2020-08-21 09:52:53 -07:00
2022-04-15 14:49:54 -07:00
2022-04-15 14:49:54 -07:00
2021-04-16 16:10:36 -07:00
2021-05-22 15:09:07 -10:00
2022-04-15 14:49:55 -07:00
2022-04-15 14:49:55 -07:00
2022-04-15 14:49:55 -07:00
2022-04-15 14:49:55 -07:00
2022-04-15 14:49:55 -07:00
2022-03-22 15:57:08 -07:00
2022-03-22 15:57:05 -07:00
2022-03-08 09:30:46 -05:00
2021-12-03 10:58:13 -08:00
2022-03-22 18:26:56 -07:00
2022-04-01 11:46:09 -07:00
2022-03-24 19:06:51 -07:00
2022-03-22 18:26:56 -07:00
2022-03-22 16:11:53 -07:00
2022-04-21 20:01:09 -07:00
2022-04-24 10:05:38 -07:00
2020-06-10 19:14:18 -07:00
2022-04-22 09:20:16 -07:00
2021-11-06 13:30:40 -07:00
2022-03-22 17:03:12 -07:00
2022-03-22 15:57:11 -07:00
2022-04-21 20:01:09 -07:00
2021-07-01 11:06:03 -07:00
2021-07-01 11:06:03 -07:00
2022-01-15 16:30:31 +02:00
2022-01-22 08:33:37 +02:00
2022-03-22 15:57:11 -07:00