mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Matheus Alves de Almeida <matheus.aalmeida@inf.ufrgs.br>,
	linux-fsdevel@vger.kernel.org,  linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/3] fat: support adding multiple clusters
Date: Tue, 13 Oct 2026 22:17:29 +0900	[thread overview]
Message-ID: <87h5ipn3iu.fsf@mail.parknet.co.jp> (raw)
In-Reply-To: <20261012171106.146243-3-matheus.aalmeida@inf.ufrgs.br>

Matheus Alves de Almeida <matheus.aalmeida@inf.ufrgs.br> writes:

> fat_add_cluster() currently adds only one cluster to a file's chain,
> requiring multiple calls when adding more clusters.
>
> Add a fat_alloc_chain() helper that allocates a cluster chain
> but only returns the first cluster. Extend fat_add_cluster()
> to add multiple clusters in a single call and rename it to
> fat_add_clusters() to reflect the new behavior.
>
> Signed-off-by: Matheus Alves de Almeida <matheus.aalmeida@inf.ufrgs.br>

Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>

Looks good. Thanks.

> ---
>  fs/fat/fat.h    |  3 ++-
>  fs/fat/fatent.c | 18 ++++++++++++++++--
>  fs/fat/file.c   |  2 +-
>  fs/fat/inode.c  |  8 ++++----
>  4 files changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/fs/fat/fat.h b/fs/fat/fat.h
> index 61338413d..b18385461 100644
> --- a/fs/fat/fat.h
> +++ b/fs/fat/fat.h
> @@ -395,6 +395,7 @@ extern int fat_ent_write(struct inode *inode, struct fat_entry *fatent,
>  			 int new, int wait);
>  extern int fat_alloc_clusters(struct inode *inode, int *cluster,
>  			      int nr_cluster);
> +int fat_alloc_chain(struct inode *inode, int *cluster, int nr_cluster);
>  extern int fat_free_clusters(struct inode *inode, int cluster);
>  extern int fat_count_free_clusters(struct super_block *sb);
>  extern int fat_trim_fs(struct inode *inode, struct fstrim_range *range);
> @@ -440,7 +441,7 @@ static inline unsigned long fat_dir_hash(int logstart)
>  {
>  	return hash_32(logstart, FAT_HASH_BITS);
>  }
> -extern int fat_add_cluster(struct inode *inode);
> +extern int fat_add_clusters(struct inode *inode, int nr_cluster);
>  
>  /* fat/misc.c */
>  extern __printf(3, 4) __cold
> diff --git a/fs/fat/fatent.c b/fs/fat/fatent.c
> index bfab8eab5..8897a5dd5 100644
> --- a/fs/fat/fatent.c
> +++ b/fs/fat/fatent.c
> @@ -488,7 +488,8 @@ static int fat_flush_bhs(struct super_block *sb, struct buffer_head **bhs,
>  	return 0;
>  }
>  
> -int fat_alloc_clusters(struct inode *inode, int *cluster, int nr_cluster)
> +static int __fat_alloc_clusters(struct inode *inode, int *cluster, int nr_cluster,
> +				bool return_all)
>  {
>  	struct super_block *sb = inode->i_sb;
>  	struct msdos_sb_info *sbi = MSDOS_SB(sb);
> @@ -531,7 +532,10 @@ int fat_alloc_clusters(struct inode *inode, int *cluster, int nr_cluster)
>  				if (sbi->free_clusters != -1)
>  					sbi->free_clusters--;
>  
> -				cluster[idx_clus] = entry;
> +				if (return_all)
> +					cluster[idx_clus] = entry;
> +				else if (!idx_clus)
> +					*cluster = entry;
>  				idx_clus++;
>  
>  				if (nr_bhs + fatent.nr_bhs > MAX_BUF_PER_PAGE) {
> @@ -581,6 +585,16 @@ int fat_alloc_clusters(struct inode *inode, int *cluster, int nr_cluster)
>  	return err;
>  }
>  
> +int fat_alloc_clusters(struct inode *inode, int *cluster, int nr_cluster)
> +{
> +	return __fat_alloc_clusters(inode, cluster, nr_cluster, true);
> +}
> +
> +int fat_alloc_chain(struct inode *inode, int *cluster, int nr_cluster)
> +{
> +	return __fat_alloc_clusters(inode, cluster, nr_cluster, false);
> +}
> +
>  int fat_free_clusters(struct inode *inode, int cluster)
>  {
>  	struct super_block *sb = inode->i_sb;
> diff --git a/fs/fat/file.c b/fs/fat/file.c
> index 1c835ca5f..41d49e9de 100644
> --- a/fs/fat/file.c
> +++ b/fs/fat/file.c
> @@ -292,7 +292,7 @@ static long fat_fallocate(struct file *file, int mode,
>  
>  		/* Start the allocation.We are not zeroing out the clusters */
>  		while (nr_cluster-- > 0) {
> -			err = fat_add_cluster(inode);
> +			err = fat_add_clusters(inode, 1);
>  			if (err)
>  				goto error;
>  		}
> diff --git a/fs/fat/inode.c b/fs/fat/inode.c
> index f775a004c..141276fcf 100644
> --- a/fs/fat/inode.c
> +++ b/fs/fat/inode.c
> @@ -101,16 +101,16 @@ static struct fat_floppy_defaults {
>  },
>  };
>  
> -int fat_add_cluster(struct inode *inode)
> +int fat_add_clusters(struct inode *inode, int nr_cluster)
>  {
>  	int err, cluster;
>  
> -	err = fat_alloc_clusters(inode, &cluster, 1);
> +	err = fat_alloc_chain(inode, &cluster, nr_cluster);
>  	if (err)
>  		return err;
>  	/* FIXME: this cluster should be added after data of this
>  	 * cluster is writed */
> -	err = fat_chain_add(inode, cluster, 1);
> +	err = fat_chain_add(inode, cluster, nr_cluster);
>  	if (err)
>  		fat_free_clusters(inode, cluster);
>  	return err;
> @@ -152,7 +152,7 @@ static inline int __fat_get_block(struct inode *inode, sector_t iblock,
>  	 */
>  	if (!offset && !(iblock < last_block)) {
>  		/* TODO: multiple cluster allocation would be desirable. */
> -		err = fat_add_cluster(inode);
> +		err = fat_add_clusters(inode, 1);
>  		if (err)
>  			return err;
>  	}

-- 
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>

  reply	other threads:[~2026-10-13 13:17 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-12 17:11 [PATCH v2 0/3] fat: allocate multiple clusters in fallocate Matheus Alves de Almeida
2026-10-12 17:11 ` [PATCH v2 1/3] fat: remove cluster allocation size limit Matheus Alves de Almeida
2026-10-13 13:17   ` OGAWA Hirofumi
2026-10-12 17:11 ` [PATCH v2 2/3] fat: support adding multiple clusters Matheus Alves de Almeida
2026-10-13 13:17   ` OGAWA Hirofumi [this message]
2026-10-12 17:11 ` [PATCH v2 3/3] fat: allocate multiple clusters in fallocate Matheus Alves de Almeida
2026-10-13 13:17   ` OGAWA Hirofumi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87h5ipn3iu.fsf@mail.parknet.co.jp \
    --to=hirofumi@mail.parknet.co.jp \
    --cc=akpm@linux-foundation.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matheus.aalmeida@inf.ufrgs.br \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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®