* [f2fs-dev] [PATCH v2 1/2] f2fs: fix remove page failed in invalidate compress pages
@ 2021-11-26 10:19 Fengnan Chang
2021-11-26 10:19 ` [f2fs-dev] [PATCH v2 2/2] f2fs: support POSIX_FADV_DONTNEED drop compressed page cache Fengnan Chang
2021-11-26 15:12 ` [f2fs-dev] [PATCH v2 1/2] f2fs: fix remove page failed in invalidate compress pages Chao Yu
0 siblings, 2 replies; 4+ messages in thread
From: Fengnan Chang @ 2021-11-26 10:19 UTC (permalink / raw)
To: jaegeuk, chao; +Cc: Fengnan Chang, linux-f2fs-devel
Since compress inode not a regular file, generic_error_remove_page in
f2fs_invalidate_compress_pages will always be failed, set compress
inode as a regular file to fix it.
Fixes: 6ce19aff0b8c ("f2fs: compress: add compress_inode to cache compressed
blocks")
Signed-off-by: Fengnan Chang <changfengnan@vivo.com>
---
fs/f2fs/inode.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 0f8b2df3e1e0..1db7823d5a13 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -516,6 +516,11 @@ struct inode *f2fs_iget(struct super_block *sb, unsigned long ino)
} else if (ino == F2FS_COMPRESS_INO(sbi)) {
#ifdef CONFIG_F2FS_FS_COMPRESSION
inode->i_mapping->a_ops = &f2fs_compress_aops;
+ /*
+ * generic_error_remove_page only truncates pages of regular
+ * inode
+ */
+ inode->i_mode |= S_IFREG;
#endif
mapping_set_gfp_mask(inode->i_mapping,
GFP_NOFS | __GFP_HIGHMEM | __GFP_MOVABLE);
--
2.32.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [f2fs-dev] [PATCH v2 2/2] f2fs: support POSIX_FADV_DONTNEED drop compressed page cache
2021-11-26 10:19 [f2fs-dev] [PATCH v2 1/2] f2fs: fix remove page failed in invalidate compress pages Fengnan Chang
@ 2021-11-26 10:19 ` Fengnan Chang
2021-11-26 15:21 ` Chao Yu
2021-11-26 15:12 ` [f2fs-dev] [PATCH v2 1/2] f2fs: fix remove page failed in invalidate compress pages Chao Yu
1 sibling, 1 reply; 4+ messages in thread
From: Fengnan Chang @ 2021-11-26 10:19 UTC (permalink / raw)
To: jaegeuk, chao; +Cc: Fengnan Chang, linux-f2fs-devel
Previously, compressed page cache drop when clean page cache, but
POSIX_FADV_DONTNEED can't clean compressed page cache because raw page
don't have private data, and won't call f2fs_invalidate_compress_pages.
This commit call f2fs_invalidate_compress_pages() directly in
f2fs_file_fadvise() for POSIX_FADV_DONTNEED case.
Signed-off-by: Fengnan Chang <changfengnan@vivo.com>
---
fs/f2fs/file.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 32c0bd545c5c..dafdaad9a9e4 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -4677,12 +4677,11 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
static int f2fs_file_fadvise(struct file *filp, loff_t offset, loff_t len,
int advice)
{
- struct inode *inode;
struct address_space *mapping;
struct backing_dev_info *bdi;
+ struct inode *inode = file_inode(filp);
if (advice == POSIX_FADV_SEQUENTIAL) {
- inode = file_inode(filp);
if (S_ISFIFO(inode->i_mode))
return -ESPIPE;
@@ -4697,6 +4696,10 @@ static int f2fs_file_fadvise(struct file *filp, loff_t offset, loff_t len,
filp->f_mode &= ~FMODE_RANDOM;
spin_unlock(&filp->f_lock);
return 0;
+ } else if (advice == POSIX_FADV_DONTNEED) {
+ if (test_opt(F2FS_I_SB(inode), COMPRESS_CACHE) &&
+ f2fs_compressed_file(inode))
+ f2fs_invalidate_compress_pages(F2FS_I_SB(inode), inode->i_ino);
}
return generic_fadvise(filp, offset, len, advice);
--
2.32.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [f2fs-dev] [PATCH v2 1/2] f2fs: fix remove page failed in invalidate compress pages
2021-11-26 10:19 [f2fs-dev] [PATCH v2 1/2] f2fs: fix remove page failed in invalidate compress pages Fengnan Chang
2021-11-26 10:19 ` [f2fs-dev] [PATCH v2 2/2] f2fs: support POSIX_FADV_DONTNEED drop compressed page cache Fengnan Chang
@ 2021-11-26 15:12 ` Chao Yu
1 sibling, 0 replies; 4+ messages in thread
From: Chao Yu @ 2021-11-26 15:12 UTC (permalink / raw)
To: Fengnan Chang, jaegeuk; +Cc: linux-f2fs-devel
On 2021/11/26 18:19, Fengnan Chang wrote:
> Since compress inode not a regular file, generic_error_remove_page in
> f2fs_invalidate_compress_pages will always be failed, set compress
> inode as a regular file to fix it.
>
> Fixes: 6ce19aff0b8c ("f2fs: compress: add compress_inode to cache compressed
> blocks")
> Signed-off-by: Fengnan Chang <changfengnan@vivo.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Thanks,
_______________________________________________
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] 4+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: support POSIX_FADV_DONTNEED drop compressed page cache
2021-11-26 10:19 ` [f2fs-dev] [PATCH v2 2/2] f2fs: support POSIX_FADV_DONTNEED drop compressed page cache Fengnan Chang
@ 2021-11-26 15:21 ` Chao Yu
0 siblings, 0 replies; 4+ messages in thread
From: Chao Yu @ 2021-11-26 15:21 UTC (permalink / raw)
To: Fengnan Chang, jaegeuk; +Cc: linux-f2fs-devel
On 2021/11/26 18:19, Fengnan Chang wrote:
> Previously, compressed page cache drop when clean page cache, but
> POSIX_FADV_DONTNEED can't clean compressed page cache because raw page
> don't have private data, and won't call f2fs_invalidate_compress_pages.
> This commit call f2fs_invalidate_compress_pages() directly in
> f2fs_file_fadvise() for POSIX_FADV_DONTNEED case.
>
> Signed-off-by: Fengnan Chang <changfengnan@vivo.com>
> ---
> fs/f2fs/file.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 32c0bd545c5c..dafdaad9a9e4 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -4677,12 +4677,11 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
> static int f2fs_file_fadvise(struct file *filp, loff_t offset, loff_t len,
> int advice)
> {
> - struct inode *inode;
> struct address_space *mapping;
> struct backing_dev_info *bdi;
> + struct inode *inode = file_inode(filp);
>
> if (advice == POSIX_FADV_SEQUENTIAL) {
> - inode = file_inode(filp);
> if (S_ISFIFO(inode->i_mode))
> return -ESPIPE;
>
> @@ -4697,6 +4696,10 @@ static int f2fs_file_fadvise(struct file *filp, loff_t offset, loff_t len,
> filp->f_mode &= ~FMODE_RANDOM;
> spin_unlock(&filp->f_lock);
> return 0;
> + } else if (advice == POSIX_FADV_DONTNEED) {
> + if (test_opt(F2FS_I_SB(inode), COMPRESS_CACHE) &&
> + f2fs_compressed_file(inode))
> + f2fs_invalidate_compress_pages(F2FS_I_SB(inode), inode->i_ino);
> }
Well, how about invalidating compressed pages after generic_fadvise() in order to
check inode status before dropping caches?
Thanks,
>
> return generic_fadvise(filp, offset, len, advice);
>
_______________________________________________
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] 4+ messages in thread
end of thread, other threads:[~2021-11-26 15:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-26 10:19 [f2fs-dev] [PATCH v2 1/2] f2fs: fix remove page failed in invalidate compress pages Fengnan Chang
2021-11-26 10:19 ` [f2fs-dev] [PATCH v2 2/2] f2fs: support POSIX_FADV_DONTNEED drop compressed page cache Fengnan Chang
2021-11-26 15:21 ` Chao Yu
2021-11-26 15:12 ` [f2fs-dev] [PATCH v2 1/2] f2fs: fix remove page failed in invalidate compress pages Chao Yu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).