All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] f2fs: invalidate inode and data pages if inode is no longer used
@ 2016-08-25  2:34 ` Jaegeuk Kim
  0 siblings, 0 replies; 6+ messages in thread
From: Jaegeuk Kim @ 2016-08-25  2:34 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel, linux-f2fs-devel; +Cc: Jaegeuk Kim

When a file is closed, let's deactivate inode page to mitigate further memory
pressure. We can do data pages as well in the corner case of f2fs_drop_inode.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
 fs/f2fs/file.c  | 4 ++++
 fs/f2fs/super.c | 1 +
 2 files changed, 5 insertions(+)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index e460211..5f9a6dc 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1465,6 +1465,10 @@ static int f2fs_release_file(struct inode *inode, struct file *filp)
 		filemap_fdatawrite(inode->i_mapping);
 		clear_inode_flag(inode, FI_DROP_CACHE);
 	}
+
+	/* deactivate written inode page */
+	invalidate_mapping_pages(NODE_MAPPING(F2FS_I_SB(inode)),
+					inode->i_ino, inode->i_ino);
 	return 0;
 }
 
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 7f863a6..f84696d 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -618,6 +618,7 @@ static int f2fs_drop_inode(struct inode *inode)
 			sb_end_intwrite(inode->i_sb);
 
 			fscrypt_put_encryption_info(inode, NULL);
+			invalidate_mapping_pages(inode->i_mapping, 0, -1);
 			spin_lock(&inode->i_lock);
 			atomic_dec(&inode->i_count);
 		}
-- 
2.8.3

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

* [PATCH] f2fs: invalidate inode and data pages if inode is no longer used
@ 2016-08-25  2:34 ` Jaegeuk Kim
  0 siblings, 0 replies; 6+ messages in thread
From: Jaegeuk Kim @ 2016-08-25  2:34 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel, linux-f2fs-devel; +Cc: Jaegeuk Kim

When a file is closed, let's deactivate inode page to mitigate further memory
pressure. We can do data pages as well in the corner case of f2fs_drop_inode.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
 fs/f2fs/file.c  | 4 ++++
 fs/f2fs/super.c | 1 +
 2 files changed, 5 insertions(+)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index e460211..5f9a6dc 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1465,6 +1465,10 @@ static int f2fs_release_file(struct inode *inode, struct file *filp)
 		filemap_fdatawrite(inode->i_mapping);
 		clear_inode_flag(inode, FI_DROP_CACHE);
 	}
+
+	/* deactivate written inode page */
+	invalidate_mapping_pages(NODE_MAPPING(F2FS_I_SB(inode)),
+					inode->i_ino, inode->i_ino);
 	return 0;
 }
 
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 7f863a6..f84696d 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -618,6 +618,7 @@ static int f2fs_drop_inode(struct inode *inode)
 			sb_end_intwrite(inode->i_sb);
 
 			fscrypt_put_encryption_info(inode, NULL);
+			invalidate_mapping_pages(inode->i_mapping, 0, -1);
 			spin_lock(&inode->i_lock);
 			atomic_dec(&inode->i_count);
 		}
-- 
2.8.3


------------------------------------------------------------------------------

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

* Re: [PATCH] f2fs: invalidate inode and data pages if inode is no longer used
  2016-08-25  2:34 ` Jaegeuk Kim
  (?)
@ 2016-08-25 11:59 ` Chao Yu
  2016-08-25 17:00   ` Jaegeuk Kim
  -1 siblings, 1 reply; 6+ messages in thread
From: Chao Yu @ 2016-08-25 11:59 UTC (permalink / raw)
  To: linux-f2fs-devel

Hi Jaegeuk,

On 2016/8/25 10:34, Jaegeuk Kim wrote:
> When a file is closed, let's deactivate inode page to mitigate further memory
> pressure. We can do data pages as well in the corner case of f2fs_drop_inode.
> 
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> ---
>  fs/f2fs/file.c  | 4 ++++
>  fs/f2fs/super.c | 1 +
>  2 files changed, 5 insertions(+)
> 
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index e460211..5f9a6dc 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -1465,6 +1465,10 @@ static int f2fs_release_file(struct inode *inode, struct file *filp)
>  		filemap_fdatawrite(inode->i_mapping);
>  		clear_inode_flag(inode, FI_DROP_CACHE);
>  	}
> +
> +	/* deactivate written inode page */
> +	invalidate_mapping_pages(NODE_MAPPING(F2FS_I_SB(inode)),
> +					inode->i_ino, inode->i_ino);

Seems if the file was opened by two processes, one process closes this file,
another one will loss page cache of inode. I'm not sure whether this predication
is friendly to user.

>  	return 0;
>  }
>  
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index 7f863a6..f84696d 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -618,6 +618,7 @@ static int f2fs_drop_inode(struct inode *inode)
>  			sb_end_intwrite(inode->i_sb);
>  
>  			fscrypt_put_encryption_info(inode, NULL);
> +			invalidate_mapping_pages(inode->i_mapping, 0, -1);

Hmm, shouldn't we truncate page cache before f2fs_truncate() like we do in
f2fs_evict?

Thanks,

>  			spin_lock(&inode->i_lock);
>  			atomic_dec(&inode->i_count);
>  		}
> 


------------------------------------------------------------------------------

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

* Re: [PATCH] f2fs: invalidate inode and data pages if inode is no longer used
  2016-08-25 11:59 ` Chao Yu
@ 2016-08-25 17:00   ` Jaegeuk Kim
  2016-08-25 17:04     ` Jaegeuk Kim
  0 siblings, 1 reply; 6+ messages in thread
From: Jaegeuk Kim @ 2016-08-25 17:00 UTC (permalink / raw)
  To: Chao Yu; +Cc: linux-f2fs-devel

On Thu, Aug 25, 2016 at 07:59:45PM +0800, Chao Yu wrote:
> Hi Jaegeuk,
> 
> On 2016/8/25 10:34, Jaegeuk Kim wrote:
> > When a file is closed, let's deactivate inode page to mitigate further memory
> > pressure. We can do data pages as well in the corner case of f2fs_drop_inode.
> > 
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> >  fs/f2fs/file.c  | 4 ++++
> >  fs/f2fs/super.c | 1 +
> >  2 files changed, 5 insertions(+)
> > 
> > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> > index e460211..5f9a6dc 100644
> > --- a/fs/f2fs/file.c
> > +++ b/fs/f2fs/file.c
> > @@ -1465,6 +1465,10 @@ static int f2fs_release_file(struct inode *inode, struct file *filp)
> >  		filemap_fdatawrite(inode->i_mapping);
> >  		clear_inode_flag(inode, FI_DROP_CACHE);
> >  	}
> > +
> > +	/* deactivate written inode page */
> > +	invalidate_mapping_pages(NODE_MAPPING(F2FS_I_SB(inode)),
> > +					inode->i_ino, inode->i_ino);
> 
> Seems if the file was opened by two processes, one process closes this file,
> another one will loss page cache of inode. I'm not sure whether this predication
> is friendly to user.

No, this only calls when it's the last writer. BTW, I need to add reader case
as well. :)

> 
> >  	return 0;
> >  }
> >  
> > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> > index 7f863a6..f84696d 100644
> > --- a/fs/f2fs/super.c
> > +++ b/fs/f2fs/super.c
> > @@ -618,6 +618,7 @@ static int f2fs_drop_inode(struct inode *inode)
> >  			sb_end_intwrite(inode->i_sb);
> >  
> >  			fscrypt_put_encryption_info(inode, NULL);
> > +			invalidate_mapping_pages(inode->i_mapping, 0, -1);
> 
> Hmm, shouldn't we truncate page cache before f2fs_truncate() like we do in
> f2fs_evict?

Then, it needs to be done under i_lock, and IMO, we don't need to wait for
writeback here.

Thanks,

> 
> Thanks,
> 
> >  			spin_lock(&inode->i_lock);
> >  			atomic_dec(&inode->i_count);
> >  		}
> > 
> 
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

------------------------------------------------------------------------------

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

* Re: [PATCH] f2fs: invalidate inode and data pages if inode is no longer used
  2016-08-25 17:00   ` Jaegeuk Kim
@ 2016-08-25 17:04     ` Jaegeuk Kim
  2016-08-26  1:14       ` Chao Yu
  0 siblings, 1 reply; 6+ messages in thread
From: Jaegeuk Kim @ 2016-08-25 17:04 UTC (permalink / raw)
  To: Chao Yu; +Cc: linux-f2fs-devel

On Thu, Aug 25, 2016 at 10:00:37AM -0700, Jaegeuk Kim wrote:
> On Thu, Aug 25, 2016 at 07:59:45PM +0800, Chao Yu wrote:
> > Hi Jaegeuk,
> > 
> > On 2016/8/25 10:34, Jaegeuk Kim wrote:
> > > When a file is closed, let's deactivate inode page to mitigate further memory
> > > pressure. We can do data pages as well in the corner case of f2fs_drop_inode.
> > > 
> > > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > > ---
> > >  fs/f2fs/file.c  | 4 ++++
> > >  fs/f2fs/super.c | 1 +
> > >  2 files changed, 5 insertions(+)
> > > 
> > > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> > > index e460211..5f9a6dc 100644
> > > --- a/fs/f2fs/file.c
> > > +++ b/fs/f2fs/file.c
> > > @@ -1465,6 +1465,10 @@ static int f2fs_release_file(struct inode *inode, struct file *filp)
> > >  		filemap_fdatawrite(inode->i_mapping);
> > >  		clear_inode_flag(inode, FI_DROP_CACHE);
> > >  	}
> > > +
> > > +	/* deactivate written inode page */
> > > +	invalidate_mapping_pages(NODE_MAPPING(F2FS_I_SB(inode)),
> > > +					inode->i_ino, inode->i_ino);
> > 
> > Seems if the file was opened by two processes, one process closes this file,
> > another one will loss page cache of inode. I'm not sure whether this predication
> > is friendly to user.
> 
> No, this only calls when it's the last writer. BTW, I need to add reader case
> as well. :)

	if (!(filp->f_mode & FMODE_WRITE) ||
			atomic_read(&inode->i_writecount) != 1)
	return 0;

So, it drops its inode page only when the last writer is closed.

Thanks,

> 
> > 
> > >  	return 0;
> > >  }
> > >  
> > > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> > > index 7f863a6..f84696d 100644
> > > --- a/fs/f2fs/super.c
> > > +++ b/fs/f2fs/super.c
> > > @@ -618,6 +618,7 @@ static int f2fs_drop_inode(struct inode *inode)
> > >  			sb_end_intwrite(inode->i_sb);
> > >  
> > >  			fscrypt_put_encryption_info(inode, NULL);
> > > +			invalidate_mapping_pages(inode->i_mapping, 0, -1);
> > 
> > Hmm, shouldn't we truncate page cache before f2fs_truncate() like we do in
> > f2fs_evict?
> 
> Then, it needs to be done under i_lock, and IMO, we don't need to wait for
> writeback here.
> 
> Thanks,
> 
> > 
> > Thanks,
> > 
> > >  			spin_lock(&inode->i_lock);
> > >  			atomic_dec(&inode->i_count);
> > >  		}
> > > 
> > 
> > 
> > ------------------------------------------------------------------------------
> > _______________________________________________
> > Linux-f2fs-devel mailing list
> > Linux-f2fs-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

------------------------------------------------------------------------------

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

* Re: [PATCH] f2fs: invalidate inode and data pages if inode is no longer used
  2016-08-25 17:04     ` Jaegeuk Kim
@ 2016-08-26  1:14       ` Chao Yu
  0 siblings, 0 replies; 6+ messages in thread
From: Chao Yu @ 2016-08-26  1:14 UTC (permalink / raw)
  To: Jaegeuk Kim; +Cc: linux-f2fs-devel

On 2016/8/26 1:04, Jaegeuk Kim wrote:
> On Thu, Aug 25, 2016 at 10:00:37AM -0700, Jaegeuk Kim wrote:
>> On Thu, Aug 25, 2016 at 07:59:45PM +0800, Chao Yu wrote:
>>> Hi Jaegeuk,
>>>
>>> On 2016/8/25 10:34, Jaegeuk Kim wrote:
>>>> When a file is closed, let's deactivate inode page to mitigate further memory
>>>> pressure. We can do data pages as well in the corner case of f2fs_drop_inode.
>>>>
>>>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
>>>> ---
>>>>  fs/f2fs/file.c  | 4 ++++
>>>>  fs/f2fs/super.c | 1 +
>>>>  2 files changed, 5 insertions(+)
>>>>
>>>> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
>>>> index e460211..5f9a6dc 100644
>>>> --- a/fs/f2fs/file.c
>>>> +++ b/fs/f2fs/file.c
>>>> @@ -1465,6 +1465,10 @@ static int f2fs_release_file(struct inode *inode, struct file *filp)
>>>>  		filemap_fdatawrite(inode->i_mapping);
>>>>  		clear_inode_flag(inode, FI_DROP_CACHE);
>>>>  	}
>>>> +
>>>> +	/* deactivate written inode page */
>>>> +	invalidate_mapping_pages(NODE_MAPPING(F2FS_I_SB(inode)),
>>>> +					inode->i_ino, inode->i_ino);
>>>
>>> Seems if the file was opened by two processes, one process closes this file,
>>> another one will loss page cache of inode. I'm not sure whether this predication
>>> is friendly to user.
>>
>> No, this only calls when it's the last writer. BTW, I need to add reader case
>> as well. :)

Oh, right.

> 
> 	if (!(filp->f_mode & FMODE_WRITE) ||
> 			atomic_read(&inode->i_writecount) != 1)
> 	return 0;
> 
> So, it drops its inode page only when the last writer is closed.

Reading data of inode will trigger atime updating, should we consider to keep
inode page for read?

Thanks,

> 
> Thanks,
> 
>>
>>>
>>>>  	return 0;
>>>>  }
>>>>  
>>>> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
>>>> index 7f863a6..f84696d 100644
>>>> --- a/fs/f2fs/super.c
>>>> +++ b/fs/f2fs/super.c
>>>> @@ -618,6 +618,7 @@ static int f2fs_drop_inode(struct inode *inode)
>>>>  			sb_end_intwrite(inode->i_sb);
>>>>  
>>>>  			fscrypt_put_encryption_info(inode, NULL);
>>>> +			invalidate_mapping_pages(inode->i_mapping, 0, -1);
>>>
>>> Hmm, shouldn't we truncate page cache before f2fs_truncate() like we do in
>>> f2fs_evict?
>>
>> Then, it needs to be done under i_lock, and IMO, we don't need to wait for
>> writeback here.
>>
>> Thanks,
>>
>>>
>>> Thanks,
>>>
>>>>  			spin_lock(&inode->i_lock);
>>>>  			atomic_dec(&inode->i_count);
>>>>  		}
>>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> _______________________________________________
>>> Linux-f2fs-devel mailing list
>>> Linux-f2fs-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
>>
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> Linux-f2fs-devel mailing list
>> Linux-f2fs-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
> 
> .
> 


------------------------------------------------------------------------------

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

end of thread, other threads:[~2016-08-26  2:53 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-25  2:34 [PATCH] f2fs: invalidate inode and data pages if inode is no longer used Jaegeuk Kim
2016-08-25  2:34 ` Jaegeuk Kim
2016-08-25 11:59 ` Chao Yu
2016-08-25 17:00   ` Jaegeuk Kim
2016-08-25 17:04     ` Jaegeuk Kim
2016-08-26  1:14       ` Chao Yu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.