mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [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 1/9] exfat: add cache option for __exfat_ent_get Chi Zhiling
                   ` (8 more replies)
  0 siblings, 9 replies; 14+ 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] 14+ messages in thread
* Re: [PATCH v1 3/9] exfat: reuse cache to improve exfat_get_cluster
@ 2025-12-30  9:05 Yuezhang.Mo
  2025-12-31  1:37 ` Chi Zhiling
  0 siblings, 1 reply; 14+ messages in thread
From: Yuezhang.Mo @ 2025-12-30  9:05 UTC (permalink / raw)
  To: chizhiling
  Cc: brauner, chizhiling, jack, linkinjeon, linux-fsdevel,
	linux-kernel, sj1557.seo, viro, willy, Yuezhang.Mo

> -             if (exfat_ent_get(sb, *dclus, &content, NULL))
> -                     return -EIO;
> +             if (exfat_ent_get(sb, *dclus, &content, &bh))
> +                     goto err;

As you commented,  the buffer_head needs release if no error return.
Here, an error was returned, buffer_head had been released.

>  
>               *last_dclus = *dclus;
>               *dclus = content;
> @@ -299,7 +300,7 @@ int exfat_get_cluster(struct inode *inode, unsigned int cluster,                                                                                                  
>                               exfat_fs_error(sb,
>                                      "invalid cluster chain (i_pos %u, last_clus 0x%08x is EOF)",
>                                      *fclus, (*last_dclus));
> -                             return -EIO;
> +                             goto err;
>                       }
>
>                       break;
> @@ -309,6 +310,10 @@ int exfat_get_cluster(struct inode *inode, unsigned int cluster,
>                       cache_init(&cid, *fclus, *dclus);
>       }
>
> +     brelse(bh);
>       exfat_cache_add(inode, &cid);
>       return 0;
> +err:
> +     brelse(bh);
> +     return -EIO;
>  }



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

end of thread, other threads:[~2026-01-05  3:07 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 1/9] exfat: add cache option for __exfat_ent_get Chi Zhiling
2025-12-26  9:44 ` [PATCH v1 2/9] exfat: support reuse buffer head for exfat_ent_get Chi Zhiling
2025-12-26  9:44 ` [PATCH v1 3/9] exfat: reuse cache to improve exfat_get_cluster Chi Zhiling
2025-12-26  9:44 ` [PATCH v1 4/9] exfat: improve exfat_count_num_clusters Chi Zhiling
2025-12-26  9:44 ` [PATCH v1 5/9] exfat: improve exfat_find_last_cluster Chi Zhiling
2025-12-26  9:44 ` [PATCH v1 6/9] exfat: remove unused parameters from exfat_get_cluster Chi Zhiling
2025-12-26  9:44 ` [PATCH v1 7/9] exfat: tweak exfat_cache_lookup to support zero offset cluster Chi Zhiling
2025-12-26  9:44 ` [PATCH v1 8/9] exfat: support multi-cluster for exfat_map_cluster Chi Zhiling
2025-12-26  9:44 ` [PATCH v1 9/9] exfat: support multi-cluster for exfat_get_cluster Chi Zhiling
2025-12-30  9:05 [PATCH v1 3/9] exfat: reuse cache to improve exfat_get_cluster Yuezhang.Mo
2025-12-31  1:37 ` Chi Zhiling
2026-01-04  7:56   ` Yuezhang.Mo
2026-01-05  3:07     ` 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®