]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
exfat: tweak cluster cache to support zero offset
authorChi Zhiling <chizhiling@kylinos.cn>
Wed, 14 Jan 2026 12:17:47 +0000 (20:17 +0800)
committerNamjae Jeon <linkinjeon@kernel.org>
Thu, 12 Feb 2026 12:21:50 +0000 (21:21 +0900)
The current cache mechanism does not support reading clusters starting
from a file offset of zero. This patch enables that feature in
preparation for subsequent reads of contiguous clusters from offset zero.

1. support finding clusters with zero offset.
2. allow clusters with zero offset to be cached.

Signed-off-by: Chi Zhiling <chizhiling@kylinos.cn>
Reviewed-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/exfat/cache.c

index 025b39b7a9acc0ecbef4f15f43041ed35d4c05af..73147e153c2cbd0a6d34a9d262bfe69c07b976a5 100644 (file)
@@ -92,7 +92,7 @@ static unsigned int exfat_cache_lookup(struct inode *inode,
        spin_lock(&ei->cache_lru_lock);
        list_for_each_entry(p, &ei->cache_lru, cache_list) {
                /* Find the cache of "fclus" or nearest cache. */
-               if (p->fcluster <= fclus && hit->fcluster < p->fcluster) {
+               if (p->fcluster <= fclus && hit->fcluster <= p->fcluster) {
                        hit = p;
                        if (hit->fcluster + hit->nr_contig < fclus) {
                                offset = hit->nr_contig;
@@ -259,7 +259,7 @@ int exfat_get_cluster(struct inode *inode, unsigned int cluster,
        if (cluster == 0 || *dclus == EXFAT_EOF_CLUSTER)
                return 0;
 
-       cache_init(&cid, EXFAT_EOF_CLUSTER, EXFAT_EOF_CLUSTER);
+       cache_init(&cid, fclus, *dclus);
        exfat_cache_lookup(inode, cluster, &cid, &fclus, dclus);
 
        if (fclus == cluster)