diff for duplicates of <00d401dc2d0a$18100c20$48302460$@samsung.com> diff --git a/a/1.txt b/N1/1.txt index 74a52eb..5ede0b5 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -38,89 +38,80 @@ > Thanks, > -Does “readahead more node pages” mean removing this condition? -" offset[i - 1] % MAX_RA_NODE == 0 " - -I originally added the condition to prevent unnecessary readahead requests, -but it seems this condition was actually blocking valid readahead as well. - -After removing the condition and running tests, -I confirmed that more readahead node pages are being issued. - -I’ll share the test results along with the improved patch. - -Thanks, - -> > Tested on a 256GB mobile device with an SM8750 chipset. -> > -> > Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com> -> > Reviewed-by: Sunmin Jeong <s_min.jeong@samsung.com> -> > Signed-off-by: Yunji Kang <yunji0.kang@samsung.com> -> > --- -> > v2: -> > - Modify the readahead condition check routine for better code -> > readability. -> > - Update the title from 'node block' to 'node blocks'. -> > -> > fs/f2fs/data.c | 3 +++ -> > fs/f2fs/f2fs.h | 1 + -> > fs/f2fs/node.c | 5 ++++- -> > 3 files changed, 8 insertions(+), 1 deletion(-) -> > -> > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index -> > 7961e0ddfca3..ab3117e3b24a 100644 -> > --- a/fs/f2fs/data.c -> > +++ b/fs/f2fs/data.c -> > @@ -1572,6 +1572,9 @@ int f2fs_map_blocks(struct inode *inode, struct -> f2fs_map_blocks *map, int flag) -> > pgofs = (pgoff_t)map->m_lblk; -> > end = pgofs + maxblocks; -> > -> > + if (flag == F2FS_GET_BLOCK_PRECACHE) -> > + mode = LOOKUP_NODE_PRECACHE; -> > + -> > next_dnode: -> > if (map->m_may_create) { -> > if (f2fs_lfs_mode(sbi)) -> > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index -> > 9d3bc9633c1d..3ce41528d48e 100644 -> > --- a/fs/f2fs/f2fs.h -> > +++ b/fs/f2fs/f2fs.h -> > @@ -651,6 +651,7 @@ enum { -> > * look up a node with readahead called -> > * by get_data_block. -> > */ -> > + LOOKUP_NODE_PRECACHE, /* look up a node for -> F2FS_GET_BLOCK_PRECACHE */ -> > }; -> > -> > #define DEFAULT_RETRY_IO_COUNT 8 /* maximum retry read IO or flush -> count */ -> > diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index -> > 4254db453b2d..d4bf3ce715c5 100644 -> > --- a/fs/f2fs/node.c -> > +++ b/fs/f2fs/node.c -> > @@ -860,7 +860,10 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, -> pgoff_t index, int mode) -> > set_nid(parent, offset[i - 1], nids[i], i == 1); -> > f2fs_alloc_nid_done(sbi, nids[i]); -> > done = true; -> > - } else if (mode == LOOKUP_NODE_RA && i == level && level > 1) -> { -> > + } else if ((i == level && level > 1) && -> > + (mode == LOOKUP_NODE_RA || -> > + (mode == LOOKUP_NODE_PRECACHE && -> > + offset[i - 1] % MAX_RA_NODE == 0))) { -> > nfolio[i] = f2fs_get_node_folio_ra(parent, offset[i - -> 1]); -> > if (IS_ERR(nfolio[i])) { +Does “readahead more node pages” mean removing this condition?\r +" offset[i - 1] % MAX_RA_NODE == 0 "\r +\r +I originally added the condition to prevent unnecessary readahead requests, \r +but it seems this condition was actually blocking valid readahead as well.\r +\r +After removing the condition and running tests, \r +I confirmed that more readahead node pages are being issued.\r +\r +I’ll share the test results along with the improved patch.\r +\r +Thanks,\r +\r +> > Tested on a 256GB mobile device with an SM8750 chipset.\r +> >\r +> > Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>\r +> > Reviewed-by: Sunmin Jeong <s_min.jeong@samsung.com>\r +> > Signed-off-by: Yunji Kang <yunji0.kang@samsung.com>\r +> > ---\r +> > v2:\r +> > - Modify the readahead condition check routine for better code\r +> > readability.\r +> > - Update the title from 'node block' to 'node blocks'.\r +> >\r +> > fs/f2fs/data.c | 3 +++\r +> > fs/f2fs/f2fs.h | 1 +\r +> > fs/f2fs/node.c | 5 ++++-\r +> > 3 files changed, 8 insertions(+), 1 deletion(-)\r +> >\r +> > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index\r +> > 7961e0ddfca3..ab3117e3b24a 100644\r +> > --- a/fs/f2fs/data.c\r +> > +++ b/fs/f2fs/data.c\r +> > @@ -1572,6 +1572,9 @@ int f2fs_map_blocks(struct inode *inode, struct\r +> f2fs_map_blocks *map, int flag)\r +> > pgofs = (pgoff_t)map->m_lblk;\r +> > end = pgofs + maxblocks;\r +> >\r +> > + if (flag == F2FS_GET_BLOCK_PRECACHE)\r +> > + mode = LOOKUP_NODE_PRECACHE;\r +> > +\r +> > next_dnode:\r +> > if (map->m_may_create) {\r +> > if (f2fs_lfs_mode(sbi))\r +> > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index\r +> > 9d3bc9633c1d..3ce41528d48e 100644\r +> > --- a/fs/f2fs/f2fs.h\r +> > +++ b/fs/f2fs/f2fs.h\r +> > @@ -651,6 +651,7 @@ enum {\r +> > * look up a node with readahead called\r +> > * by get_data_block.\r +> > */\r +> > + LOOKUP_NODE_PRECACHE, /* look up a node for\r +> F2FS_GET_BLOCK_PRECACHE */\r +> > };\r +> >\r +> > #define DEFAULT_RETRY_IO_COUNT 8 /* maximum retry read IO or flush\r +> count */\r +> > diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index\r +> > 4254db453b2d..d4bf3ce715c5 100644\r +> > --- a/fs/f2fs/node.c\r +> > +++ b/fs/f2fs/node.c\r +> > @@ -860,7 +860,10 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn,\r +> pgoff_t index, int mode)\r +> > set_nid(parent, offset[i - 1], nids[i], i == 1);\r +> > f2fs_alloc_nid_done(sbi, nids[i]);\r +> > done = true;\r +> > - } else if (mode == LOOKUP_NODE_RA && i == level && level > 1)\r +> {\r +> > + } else if ((i == level && level > 1) &&\r +> > + (mode == LOOKUP_NODE_RA ||\r +> > + (mode == LOOKUP_NODE_PRECACHE &&\r +> > + offset[i - 1] % MAX_RA_NODE == 0))) {\r +> > nfolio[i] = f2fs_get_node_folio_ra(parent, offset[i -\r +> 1]);\r +> > if (IS_ERR(nfolio[i])) {\r > > err = PTR_ERR(nfolio[i]); - - - - - -_______________________________________________ -Linux-f2fs-devel mailing list -Linux-f2fs-devel@lists.sourceforge.net -https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel diff --git a/a/content_digest b/N1/content_digest index a9b2e80..8459edf 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -2,13 +2,14 @@ "ref\020250918082023.57381-1-yunji0.kang@samsung.com\0" "ref\089f237cd-3f86-405a-8f8f-d9cad250ef00@kernel.org\0" "From\0Yunji Kang <yunji0.kang@samsung.com>\0" - "Subject\0Re: [f2fs-dev] [PATCH v2] f2fs: readahead node blocks in F2FS_GET_BLOCK_PRECACHE mode\0" + "Subject\0RE: [PATCH v2] f2fs: readahead node blocks in F2FS_GET_BLOCK_PRECACHE mode\0" "Date\0Wed, 24 Sep 2025 13:17:08 +0900\0" "To\0'Chao Yu' <chao@kernel.org>" " <jaegeuk@kernel.org>\0" - "Cc\0'Sungjong Seo' <sj1557.seo@samsung.com>" - linux-kernel@vger.kernel.org - " linux-f2fs-devel@lists.sourceforge.net\0" + "Cc\0<linux-f2fs-devel@lists.sourceforge.net>" + <linux-kernel@vger.kernel.org> + 'Sungjong Seo' <sj1557.seo@samsung.com> + " 'Sunmin Jeong' <s_min.jeong@samsung.com>\0" "\00:1\0" "b\0" "> > In f2fs_precache_extents(), For large files, It requires reading many\n" @@ -51,91 +52,82 @@ "> Thanks,\n" "> \n" "\n" - "Does \342\200\234readahead more node pages\342\200\235 mean removing this condition?\n" - "\" offset[i - 1] % MAX_RA_NODE == 0 \"\n" - "\n" - "I originally added the condition to prevent unnecessary readahead requests, \n" - "but it seems this condition was actually blocking valid readahead as well.\n" - "\n" - "After removing the condition and running tests, \n" - "I confirmed that more readahead node pages are being issued.\n" - "\n" - "I\342\200\231ll share the test results along with the improved patch.\n" - "\n" - "Thanks,\n" - "\n" - "> > Tested on a 256GB mobile device with an SM8750 chipset.\n" - "> >\n" - "> > Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>\n" - "> > Reviewed-by: Sunmin Jeong <s_min.jeong@samsung.com>\n" - "> > Signed-off-by: Yunji Kang <yunji0.kang@samsung.com>\n" - "> > ---\n" - "> > v2:\n" - "> > - Modify the readahead condition check routine for better code\n" - "> > readability.\n" - "> > - Update the title from 'node block' to 'node blocks'.\n" - "> >\n" - "> > fs/f2fs/data.c | 3 +++\n" - "> > fs/f2fs/f2fs.h | 1 +\n" - "> > fs/f2fs/node.c | 5 ++++-\n" - "> > 3 files changed, 8 insertions(+), 1 deletion(-)\n" - "> >\n" - "> > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index\n" - "> > 7961e0ddfca3..ab3117e3b24a 100644\n" - "> > --- a/fs/f2fs/data.c\n" - "> > +++ b/fs/f2fs/data.c\n" - "> > @@ -1572,6 +1572,9 @@ int f2fs_map_blocks(struct inode *inode, struct\n" - "> f2fs_map_blocks *map, int flag)\n" - "> > \tpgofs =\t(pgoff_t)map->m_lblk;\n" - "> > \tend = pgofs + maxblocks;\n" - "> >\n" - "> > +\tif (flag == F2FS_GET_BLOCK_PRECACHE)\n" - "> > +\t\tmode = LOOKUP_NODE_PRECACHE;\n" - "> > +\n" - "> > next_dnode:\n" - "> > \tif (map->m_may_create) {\n" - "> > \t\tif (f2fs_lfs_mode(sbi))\n" - "> > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index\n" - "> > 9d3bc9633c1d..3ce41528d48e 100644\n" - "> > --- a/fs/f2fs/f2fs.h\n" - "> > +++ b/fs/f2fs/f2fs.h\n" - "> > @@ -651,6 +651,7 @@ enum {\n" - "> > \t\t\t\t\t * look up a node with readahead called\n" - "> > \t\t\t\t\t * by get_data_block.\n" - "> > \t\t\t\t\t */\n" - "> > +\tLOOKUP_NODE_PRECACHE,\t\t/* look up a node for\n" - "> F2FS_GET_BLOCK_PRECACHE */\n" - "> > };\n" - "> >\n" - "> > #define DEFAULT_RETRY_IO_COUNT\t8\t/* maximum retry read IO or flush\n" - "> count */\n" - "> > diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index\n" - "> > 4254db453b2d..d4bf3ce715c5 100644\n" - "> > --- a/fs/f2fs/node.c\n" - "> > +++ b/fs/f2fs/node.c\n" - "> > @@ -860,7 +860,10 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn,\n" - "> pgoff_t index, int mode)\n" - "> > \t\t\tset_nid(parent, offset[i - 1], nids[i], i == 1);\n" - "> > \t\t\tf2fs_alloc_nid_done(sbi, nids[i]);\n" - "> > \t\t\tdone = true;\n" - "> > -\t\t} else if (mode == LOOKUP_NODE_RA && i == level && level > 1)\n" - "> {\n" - "> > +\t\t} else if ((i == level && level > 1) &&\n" - "> > +\t\t\t\t(mode == LOOKUP_NODE_RA ||\n" - "> > +\t\t\t\t(mode == LOOKUP_NODE_PRECACHE &&\n" - "> > +\t\t\t\toffset[i - 1] % MAX_RA_NODE == 0))) {\n" - "> > \t\t\tnfolio[i] = f2fs_get_node_folio_ra(parent, offset[i -\n" - "> 1]);\n" - "> > \t\t\tif (IS_ERR(nfolio[i])) {\n" - "> > \t\t\t\terr = PTR_ERR(nfolio[i]);\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "_______________________________________________\n" - "Linux-f2fs-devel mailing list\n" - "Linux-f2fs-devel@lists.sourceforge.net\n" - https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel + "Does \342\200\234readahead more node pages\342\200\235 mean removing this condition?\r\n" + "\" offset[i - 1] % MAX_RA_NODE == 0 \"\r\n" + "\r\n" + "I originally added the condition to prevent unnecessary readahead requests, \r\n" + "but it seems this condition was actually blocking valid readahead as well.\r\n" + "\r\n" + "After removing the condition and running tests, \r\n" + "I confirmed that more readahead node pages are being issued.\r\n" + "\r\n" + "I\342\200\231ll share the test results along with the improved patch.\r\n" + "\r\n" + "Thanks,\r\n" + "\r\n" + "> > Tested on a 256GB mobile device with an SM8750 chipset.\r\n" + "> >\r\n" + "> > Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>\r\n" + "> > Reviewed-by: Sunmin Jeong <s_min.jeong@samsung.com>\r\n" + "> > Signed-off-by: Yunji Kang <yunji0.kang@samsung.com>\r\n" + "> > ---\r\n" + "> > v2:\r\n" + "> > - Modify the readahead condition check routine for better code\r\n" + "> > readability.\r\n" + "> > - Update the title from 'node block' to 'node blocks'.\r\n" + "> >\r\n" + "> > fs/f2fs/data.c | 3 +++\r\n" + "> > fs/f2fs/f2fs.h | 1 +\r\n" + "> > fs/f2fs/node.c | 5 ++++-\r\n" + "> > 3 files changed, 8 insertions(+), 1 deletion(-)\r\n" + "> >\r\n" + "> > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index\r\n" + "> > 7961e0ddfca3..ab3117e3b24a 100644\r\n" + "> > --- a/fs/f2fs/data.c\r\n" + "> > +++ b/fs/f2fs/data.c\r\n" + "> > @@ -1572,6 +1572,9 @@ int f2fs_map_blocks(struct inode *inode, struct\r\n" + "> f2fs_map_blocks *map, int flag)\r\n" + "> > \tpgofs =\t(pgoff_t)map->m_lblk;\r\n" + "> > \tend = pgofs + maxblocks;\r\n" + "> >\r\n" + "> > +\tif (flag == F2FS_GET_BLOCK_PRECACHE)\r\n" + "> > +\t\tmode = LOOKUP_NODE_PRECACHE;\r\n" + "> > +\r\n" + "> > next_dnode:\r\n" + "> > \tif (map->m_may_create) {\r\n" + "> > \t\tif (f2fs_lfs_mode(sbi))\r\n" + "> > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index\r\n" + "> > 9d3bc9633c1d..3ce41528d48e 100644\r\n" + "> > --- a/fs/f2fs/f2fs.h\r\n" + "> > +++ b/fs/f2fs/f2fs.h\r\n" + "> > @@ -651,6 +651,7 @@ enum {\r\n" + "> > \t\t\t\t\t * look up a node with readahead called\r\n" + "> > \t\t\t\t\t * by get_data_block.\r\n" + "> > \t\t\t\t\t */\r\n" + "> > +\tLOOKUP_NODE_PRECACHE,\t\t/* look up a node for\r\n" + "> F2FS_GET_BLOCK_PRECACHE */\r\n" + "> > };\r\n" + "> >\r\n" + "> > #define DEFAULT_RETRY_IO_COUNT\t8\t/* maximum retry read IO or flush\r\n" + "> count */\r\n" + "> > diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index\r\n" + "> > 4254db453b2d..d4bf3ce715c5 100644\r\n" + "> > --- a/fs/f2fs/node.c\r\n" + "> > +++ b/fs/f2fs/node.c\r\n" + "> > @@ -860,7 +860,10 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn,\r\n" + "> pgoff_t index, int mode)\r\n" + "> > \t\t\tset_nid(parent, offset[i - 1], nids[i], i == 1);\r\n" + "> > \t\t\tf2fs_alloc_nid_done(sbi, nids[i]);\r\n" + "> > \t\t\tdone = true;\r\n" + "> > -\t\t} else if (mode == LOOKUP_NODE_RA && i == level && level > 1)\r\n" + "> {\r\n" + "> > +\t\t} else if ((i == level && level > 1) &&\r\n" + "> > +\t\t\t\t(mode == LOOKUP_NODE_RA ||\r\n" + "> > +\t\t\t\t(mode == LOOKUP_NODE_PRECACHE &&\r\n" + "> > +\t\t\t\toffset[i - 1] % MAX_RA_NODE == 0))) {\r\n" + "> > \t\t\tnfolio[i] = f2fs_get_node_folio_ra(parent, offset[i -\r\n" + "> 1]);\r\n" + "> > \t\t\tif (IS_ERR(nfolio[i])) {\r\n" + "> > \t\t\t\terr = PTR_ERR(nfolio[i]);" -45f8bdba141a089239e7e3432f9c7e0f56c21ab6ebb7f8fd145341c64cebe1f3 +283ddd144bd97318988ade415648fbe305e26cd59883d83bf24bd35502b1c905
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.