mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Re: [PATCH v1 9/9] exfat: support multi-cluster for exfat_get_cluster
@ 2025-12-30  9:06 Yuezhang.Mo
  2025-12-31  2:35 ` Chi Zhiling
  0 siblings, 1 reply; 7+ messages in thread
From: Yuezhang.Mo @ 2025-12-30  9:06 UTC (permalink / raw)
  To: chizhiling
  Cc: brauner, chizhiling, jack, linkinjeon, linux-fsdevel,
	linux-kernel, sj1557.seo, viro, willy

> @@ -243,6 +244,7 @@ int exfat_get_cluster(struct inode *inode, unsigned int cluster,
>       struct buffer_head *bh = NULL;
>       struct exfat_cache_id cid;
>       unsigned int content, fclus;
> +     unsigned int end = (*count <= 1) ? cluster : cluster + *count - 1;

In exfat_get_block,  count is set as follows:

count = EXFAT_B_TO_CLU_ROUND_UP(bh_result->b_size, sbi);

So '*count' is always greater than or equal to 1, the above condition seems unnecessary.

> --- a/fs/exfat/inode.c
> +++ b/fs/exfat/inode.c
> @@ -134,6 +134,7 @@ static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,
>       struct exfat_inode_info *ei = EXFAT_I(inode);
>       unsigned int local_clu_offset = clu_offset;
>       unsigned int num_to_be_allocated = 0, num_clusters;
> +     unsigned int hint_count = max(*count, 1);

Same as above, hint_count seems unnecessary.

> +     /*
> +      * Return on cache hit to keep the code simple.
> +      */
> +     if (fclus == cluster) {
> +             *count = cid.fcluster + cid.nr_contig - fclus + 1;
>               return 0;

If 'cid.fcluster + cid.nr_contig - fclus + 1 < *count', how about continuing to collect clusters?
The following clusters may be continuous.

> +             while (fclus < end) {
> +                     if (exfat_ent_get(sb, clu, &content, &bh))
> +                             goto err;
> +                     if (++clu != content) {
> +                             /* TODO: read ahead if content valid */
> +                             break;

The next cluster index has been read and will definitely be used.
How about add it to the cache?


^ permalink raw reply	[flat|nested] 7+ messages in thread
* [PATCH v1 0/9] Enable exfat_get_block to support obtaining multiple clusters
@ 2025-12-26  9:44 Chi Zhiling
  2025-12-26  9:44 ` [PATCH v1 9/9] exfat: support multi-cluster for exfat_get_cluster Chi Zhiling
  0 siblings, 1 reply; 7+ messages in thread
From: Chi Zhiling @ 2025-12-26  9:44 UTC (permalink / raw)
  To: linux-fsdevel, linux-kernel
  Cc: Namjae Jeon, Sungjong Seo, Yuezhang Mo, Alexander Viro,
	Christian Brauner, Jan Kara, Matthew Wilcox, Chi Zhiling

From: Chi Zhiling <chizhiling@kylinos.cn>

This patch series significantly improves exFAT read performance
by adding multi-cluster mapping support.
The changes reduce get_block calls during sequential reads,
particularly benefiting small cluster sizes.

- Extends exfat_get_cluster() and exfat_map_cluster() to handle multiple contiguous clusters
- Adds buffer head caching for FAT table reads

Performance results show ~10% improvement for 512-byte clusters (454->511 MB/s)
and reduced get_block overhead from 10.8% to 0.02% for NO_FAT_CHAIN files.

All criticism and suggestions are welcome :)

Chi Zhiling (9):
  exfat: add cache option for __exfat_ent_get
  exfat: support reuse buffer head for exfat_ent_get
  exfat: reuse cache to improve exfat_get_cluster
  exfat: improve exfat_count_num_clusters
  exfat: improve exfat_find_last_cluster
  exfat: remove unused parameters from exfat_get_cluster
  exfat: tweak exfat_cache_lookup to support zero offset cluster
  exfat: support multi-cluster for exfat_map_cluster
  exfat: support multi-cluster for exfat_get_cluster

 fs/exfat/cache.c    | 108 ++++++++++++++++++++++++++++----------------
 fs/exfat/exfat_fs.h |   7 ++-
 fs/exfat/fatent.c   |  61 ++++++++++++++++---------
 fs/exfat/inode.c    |  46 +++++++++++--------
 4 files changed, 137 insertions(+), 85 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-01-06  8:46 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-30  9:06 [PATCH v1 9/9] exfat: support multi-cluster for exfat_get_cluster Yuezhang.Mo
2025-12-31  2:35 ` Chi Zhiling
2026-01-04  7:56   ` Yuezhang.Mo
2026-01-05  2:58     ` Chi Zhiling
2026-01-06  7:32       ` Yuezhang.Mo
2026-01-06  8:45         ` Chi Zhiling
  -- strict thread matches above, loose matches on Subject: below --
2025-12-26  9:44 [PATCH v1 0/9] Enable exfat_get_block to support obtaining multiple clusters Chi Zhiling
2025-12-26  9:44 ` [PATCH v1 9/9] exfat: support multi-cluster for exfat_get_cluster Chi Zhiling

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®