[PATCH] f2fs: do not support mmap write for large folio

Jaegeuk Kim posted 1 patch 2 months, 1 week ago
fs/f2fs/file.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] f2fs: do not support mmap write for large folio
Posted by Jaegeuk Kim 2 months, 1 week ago
Let's check mmmap writes onto the large folio.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
 fs/f2fs/file.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 2c4880f24b54..edfc3a374c40 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -82,7 +82,7 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
 	int err = 0;
 	vm_fault_t ret;
 
-	if (unlikely(IS_IMMUTABLE(inode)))
+	if (mapping_large_folio_support(inode->i_mapping))
 		return VM_FAULT_SIGBUS;
 
 	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
-- 
2.53.0.1213.gd9a14994de-goog
Re: [PATCH v3] f2fs: do not support mmap write for large folio
Posted by Jaegeuk Kim 2 months, 1 week ago
Let's check mmap writes onto the large folio, since we don't support writing
large folios.

Reviewed-by: Daeho Jeong <daehojeong@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---

 - log v2:
  : add comments 

 fs/f2fs/file.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 2c4880f24b54..c0220cd7b332 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -82,7 +82,12 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
 	int err = 0;
 	vm_fault_t ret;
 
-	if (unlikely(IS_IMMUTABLE(inode)))
+	/*
+	 * We only support large folio on the read case.
+	 * Don't make any dirty pages.
+	 */
+	if (unlikely(IS_IMMUTABLE(inode)) ||
+	    mapping_large_folio_support(inode->i_mapping))
 		return VM_FAULT_SIGBUS;
 
 	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
-- 
2.53.0.1213.gd9a14994de-goog
Re: [PATCH v4] f2fs: do not support mmap write for large folio
Posted by Jaegeuk Kim 2 months ago
Let's check mmap writes onto the large folio, since we don't support writing
large folios.

Reviewed-by: Daeho Jeong <daehojeong@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---

 - add f2fs_err to catch any issue

 fs/f2fs/file.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 2c4880f24b54..e917342cb828 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -82,8 +82,17 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
 	int err = 0;
 	vm_fault_t ret;
 
-	if (unlikely(IS_IMMUTABLE(inode)))
+	/*
+	 * We only support large folio on the read case.
+	 * Don't make any dirty pages.
+	 */
+	if (unlikely(IS_IMMUTABLE(inode)) ||
+	    mapping_large_folio_support(inode->i_mapping)) {
+		f2fs_err(sbi, "Not expected: immutable: %d large_folio: %d",
+				IS_IMMUTABLE(inode),
+				mapping_large_folio_support(inode->i_mapping));
 		return VM_FAULT_SIGBUS;
+	}
 
 	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
 		err = -EIO;
-- 
2.54.0.rc0.605.g598a273b03-goog
Re: [f2fs-dev] [PATCH v4] f2fs: do not support mmap write for large folio
Posted by Chao Yu 2 months ago
On 4/14/2026 6:46 AM, Jaegeuk Kim via Linux-f2fs-devel wrote:
> Let's check mmap writes onto the large folio, since we don't support writing
> large folios.
> 
> Reviewed-by: Daeho Jeong <daehojeong@google.com>
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

Reviewed-by: Chao Yu <chao@kernel.org>

Thanks,
Re: [f2fs-dev] [PATCH v3] f2fs: do not support mmap write for large folio
Posted by Chao Yu 2 months ago
On 4/9/2026 2:13 AM, Jaegeuk Kim via Linux-f2fs-devel wrote:
> Let's check mmap writes onto the large folio, since we don't support writing
> large folios.
> 
> Reviewed-by: Daeho Jeong <daehojeong@google.com>
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> ---
> 
>   - log v2:
>    : add comments
> 
>   fs/f2fs/file.c | 7 ++++++-
>   1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 2c4880f24b54..c0220cd7b332 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -82,7 +82,12 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
>   	int err = 0;
>   	vm_fault_t ret;
>   
> -	if (unlikely(IS_IMMUTABLE(inode)))
> +	/*
> +	 * We only support large folio on the read case.
> +	 * Don't make any dirty pages.
> +	 */
> +	if (unlikely(IS_IMMUTABLE(inode)) ||
> +	    mapping_large_folio_support(inode->i_mapping))
>   		return VM_FAULT_SIGBUS;

The code itself looks good, since it's an impossible case, should we
use f2fs_bug_on(, mapping_large_folio_support()) to catch any bug case
rather than just returning error here w/o log?

Thanks,

>   
>   	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
Re: [f2fs-dev] [PATCH v3] f2fs: do not support mmap write for large folio
Posted by Jaegeuk Kim 2 months ago
On 04/13, Chao Yu wrote:
> On 4/9/2026 2:13 AM, Jaegeuk Kim via Linux-f2fs-devel wrote:
> > Let's check mmap writes onto the large folio, since we don't support writing
> > large folios.
> > 
> > Reviewed-by: Daeho Jeong <daehojeong@google.com>
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> > 
> >   - log v2:
> >    : add comments
> > 
> >   fs/f2fs/file.c | 7 ++++++-
> >   1 file changed, 6 insertions(+), 1 deletion(-)
> > 
> > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> > index 2c4880f24b54..c0220cd7b332 100644
> > --- a/fs/f2fs/file.c
> > +++ b/fs/f2fs/file.c
> > @@ -82,7 +82,12 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
> >   	int err = 0;
> >   	vm_fault_t ret;
> > -	if (unlikely(IS_IMMUTABLE(inode)))
> > +	/*
> > +	 * We only support large folio on the read case.
> > +	 * Don't make any dirty pages.
> > +	 */
> > +	if (unlikely(IS_IMMUTABLE(inode)) ||
> > +	    mapping_large_folio_support(inode->i_mapping))
> >   		return VM_FAULT_SIGBUS;
> 
> The code itself looks good, since it's an impossible case, should we
> use f2fs_bug_on(, mapping_large_folio_support()) to catch any bug case
> rather than just returning error here w/o log?

Instead of kernel panicing for the production, I'd leave a kernel message first.

> 
> Thanks,
> 
> >   	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
Re: [PATCH v3] f2fs: do not support mmap write for large folio
Posted by Christoph Hellwig 2 months ago
[adding back fsdevel and mm to the discussion]

On Wed, Apr 08, 2026 at 06:13:06PM +0000, Jaegeuk Kim wrote:
> Let's check mmap writes onto the large folio, since we don't support writing
> large folios.

What does this fix?  As state in the previous round of discussion f2fs
only support large folios for immutable files, how do you get ->mkwrite
called for them.

The only way I can think of that is when clearing the immutable flag,
but simply rejecting writes with SIGBUS after that seems like it's
breaking the expected API, and I don't see handling for normal writes
after that either.
Re: [PATCH v3] f2fs: do not support mmap write for large folio
Posted by Jaegeuk Kim 2 months ago
On 04/08, Christoph Hellwig wrote:
> [adding back fsdevel and mm to the discussion]
> 
> On Wed, Apr 08, 2026 at 06:13:06PM +0000, Jaegeuk Kim wrote:
> > Let's check mmap writes onto the large folio, since we don't support writing
> > large folios.
> 
> What does this fix?  As state in the previous round of discussion f2fs
> only support large folios for immutable files, how do you get ->mkwrite
> called for them.

I'm approaching this as a safeguard first, since in any buggy case, this will
crash the filesystem.

> 
> The only way I can think of that is when clearing the immutable flag,
> but simply rejecting writes with SIGBUS after that seems like it's
> breaking the expected API, and I don't see handling for normal writes
> after that either.
Re: [PATCH] f2fs: do not support mmap write for large folio
Posted by Christoph Hellwig 2 months, 1 week ago
On Mon, Apr 06, 2026 at 03:49:40PM +0000, Jaegeuk Kim wrote:
> Let's check mmmap writes onto the large folio.

Why?  And how is this not breaking applications?

> 
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> ---
>  fs/f2fs/file.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 2c4880f24b54..edfc3a374c40 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -82,7 +82,7 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
>  	int err = 0;
>  	vm_fault_t ret;
>  
> -	if (unlikely(IS_IMMUTABLE(inode)))
> +	if (mapping_large_folio_support(inode->i_mapping))
>  		return VM_FAULT_SIGBUS;
>  
>  	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
> -- 
> 2.53.0.1213.gd9a14994de-goog
> 
> 
---end quoted text---
Re: [PATCH] f2fs: do not support mmap write for large folio
Posted by Jaegeuk Kim 2 months, 1 week ago
On 04/06, Christoph Hellwig wrote:
> On Mon, Apr 06, 2026 at 03:49:40PM +0000, Jaegeuk Kim wrote:
> > Let's check mmmap writes onto the large folio.
> 
> Why?  And how is this not breaking applications?

Since we only support the large folio on the read case.

> 
> > 
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> >  fs/f2fs/file.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> > index 2c4880f24b54..edfc3a374c40 100644
> > --- a/fs/f2fs/file.c
> > +++ b/fs/f2fs/file.c
> > @@ -82,7 +82,7 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
> >  	int err = 0;
> >  	vm_fault_t ret;
> >  
> > -	if (unlikely(IS_IMMUTABLE(inode)))
> > +	if (mapping_large_folio_support(inode->i_mapping))
> >  		return VM_FAULT_SIGBUS;
> >  
> >  	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
> > -- 
> > 2.53.0.1213.gd9a14994de-goog
> > 
> > 
> ---end quoted text---
Re: [PATCH] f2fs: do not support mmap write for large folio
Posted by Christoph Hellwig 2 months, 1 week ago
On Tue, Apr 07, 2026 at 10:58:11PM +0000, Jaegeuk Kim wrote:
> On 04/06, Christoph Hellwig wrote:
> > On Mon, Apr 06, 2026 at 03:49:40PM +0000, Jaegeuk Kim wrote:
> > > Let's check mmmap writes onto the large folio.
> > 
> > Why?  And how is this not breaking applications?
> 
> Since we only support the large folio on the read case.

In general spelling such basic out in the commit log, and even comments
is really helpful.  I'm curious how this works, though - by the time
you read a large folio you don't know if it will ever be written to.
Re: [PATCH] f2fs: do not support mmap write for large folio
Posted by David Hildenbrand (Arm) 2 months, 1 week ago
On 4/8/26 07:03, Christoph Hellwig wrote:
> On Tue, Apr 07, 2026 at 10:58:11PM +0000, Jaegeuk Kim wrote:
>> On 04/06, Christoph Hellwig wrote:
>>>
>>> Why?  And how is this not breaking applications?
>>
>> Since we only support the large folio on the read case.
> 
> In general spelling such basic out in the commit log, and even comments
> is really helpful.  I'm curious how this works, though - by the time
> you read a large folio you don't know if it will ever be written to.

Why are only large folios supported for read?

Where is that allocation logic and how can that path even be triggered?

Also, usually we check for large folios by testing the actual folio, not
whether the mapping supports them?

-- 
Cheers,

David
Re: [PATCH] f2fs: do not support mmap write for large folio
Posted by Jaegeuk Kim 2 months, 1 week ago
On 04/08, David Hildenbrand (Arm) wrote:
> On 4/8/26 07:03, Christoph Hellwig wrote:
> > On Tue, Apr 07, 2026 at 10:58:11PM +0000, Jaegeuk Kim wrote:
> >> On 04/06, Christoph Hellwig wrote:
> >>>
> >>> Why?  And how is this not breaking applications?
> >>
> >> Since we only support the large folio on the read case.
> > 
> > In general spelling such basic out in the commit log, and even comments
> > is really helpful.  I'm curious how this works, though - by the time
> > you read a large folio you don't know if it will ever be written to.
> 
> Why are only large folios supported for read?
> 
> Where is that allocation logic and how can that path even be triggered?
> 
> Also, usually we check for large folios by testing the actual folio, not
> whether the mapping supports them?

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v7.0-rc7&id=05e65c14ea59a401cec4284e9d612f9d5dc1b3f8

Currently I think it's simple to check the mapping in our case.

> 
> -- 
> Cheers,
> 
> David
Re: [PATCH] f2fs: do not support mmap write for large folio
Posted by David Hildenbrand (Arm) 2 months ago
On 4/8/26 20:08, Jaegeuk Kim wrote:
> On 04/08, David Hildenbrand (Arm) wrote:
>> On 4/8/26 07:03, Christoph Hellwig wrote:
>>>
>>> In general spelling such basic out in the commit log, and even comments
>>> is really helpful.  I'm curious how this works, though - by the time
>>> you read a large folio you don't know if it will ever be written to.
>>
>> Why are only large folios supported for read?
>>
>> Where is that allocation logic and how can that path even be triggered?
>>
>> Also, usually we check for large folios by testing the actual folio, not
>> whether the mapping supports them?
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v7.0-rc7&id=05e65c14ea59a401cec4284e9d612f9d5dc1b3f8
> 
> Currently I think it's simple to check the mapping in our case.

Thanks for the pointer.

So you are adding code for something that is impossible to be reached.

Reading the other discussions, I agree that this should be flagged
clearer as an assertion, and not a fix.

I'll let maintainers decide whether that is a assertion we should add :)

-- 
Cheers,

David
Re: [f2fs-dev] [PATCH] f2fs: do not support mmap write for large folio
Posted by Daeho Jeong 2 months, 1 week ago
On Mon, Apr 6, 2026 at 8:56 AM Jaegeuk Kim via Linux-f2fs-devel
<linux-f2fs-devel@lists.sourceforge.net> wrote:
>
> Let's check mmmap writes onto the large folio.

typo? mmap?

>
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> ---
>  fs/f2fs/file.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 2c4880f24b54..edfc3a374c40 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -82,7 +82,7 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
>         int err = 0;
>         vm_fault_t ret;
>
> -       if (unlikely(IS_IMMUTABLE(inode)))

Did you remove this intentionally?

> +       if (mapping_large_folio_support(inode->i_mapping))
>                 return VM_FAULT_SIGBUS;
>
>         if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
> --
> 2.53.0.1213.gd9a14994de-goog
>
>
>
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
Re: [f2fs-dev] [PATCH] f2fs: do not support mmap write for large folio
Posted by Jaegeuk Kim 2 months, 1 week ago
On 04/06, Daeho Jeong wrote:
> On Mon, Apr 6, 2026 at 8:56 AM Jaegeuk Kim via Linux-f2fs-devel
> <linux-f2fs-devel@lists.sourceforge.net> wrote:
> >
> > Let's check mmmap writes onto the large folio.
> 
> typo? mmap?
> 
> >
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> >  fs/f2fs/file.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> > index 2c4880f24b54..edfc3a374c40 100644
> > --- a/fs/f2fs/file.c
> > +++ b/fs/f2fs/file.c
> > @@ -82,7 +82,7 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
> >         int err = 0;
> >         vm_fault_t ret;
> >
> > -       if (unlikely(IS_IMMUTABLE(inode)))
> 
> Did you remove this intentionally?

Ah, let me remain it back to isolate the change.

> 
> > +       if (mapping_large_folio_support(inode->i_mapping))
> >                 return VM_FAULT_SIGBUS;
> >
> >         if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
> > --
> > 2.53.0.1213.gd9a14994de-goog
> >
> >
> >
> > _______________________________________________
> > Linux-f2fs-devel mailing list
> > Linux-f2fs-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel