f2fs: support POSIX_FADV_DONTNEED drop compressed page cache
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> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
Родитель
d1917865a7
Коммит
e64347ae13
|
@ -4663,12 +4663,12 @@ out:
|
||||||
static int f2fs_file_fadvise(struct file *filp, loff_t offset, loff_t len,
|
static int f2fs_file_fadvise(struct file *filp, loff_t offset, loff_t len,
|
||||||
int advice)
|
int advice)
|
||||||
{
|
{
|
||||||
struct inode *inode;
|
|
||||||
struct address_space *mapping;
|
struct address_space *mapping;
|
||||||
struct backing_dev_info *bdi;
|
struct backing_dev_info *bdi;
|
||||||
|
struct inode *inode = file_inode(filp);
|
||||||
|
int err;
|
||||||
|
|
||||||
if (advice == POSIX_FADV_SEQUENTIAL) {
|
if (advice == POSIX_FADV_SEQUENTIAL) {
|
||||||
inode = file_inode(filp);
|
|
||||||
if (S_ISFIFO(inode->i_mode))
|
if (S_ISFIFO(inode->i_mode))
|
||||||
return -ESPIPE;
|
return -ESPIPE;
|
||||||
|
|
||||||
|
@ -4685,7 +4685,13 @@ static int f2fs_file_fadvise(struct file *filp, loff_t offset, loff_t len,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return generic_fadvise(filp, offset, len, advice);
|
err = generic_fadvise(filp, offset, len, advice);
|
||||||
|
if (!err && advice == POSIX_FADV_DONTNEED &&
|
||||||
|
test_opt(F2FS_I_SB(inode), COMPRESS_CACHE) &&
|
||||||
|
f2fs_compressed_file(inode))
|
||||||
|
f2fs_invalidate_compress_pages(F2FS_I_SB(inode), inode->i_ino);
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
|
|
Загрузка…
Ссылка в новой задаче