* [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc
@ 2020-02-18 10:21 Chao Yu
2020-02-18 10:21 ` [f2fs-dev] [PATCH 2/3] f2fs: fix to avoid triggering IO in write path Chao Yu
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Chao Yu @ 2020-02-18 10:21 UTC (permalink / raw)
To: jaegeuk; +Cc: linux-kernel, linux-f2fs-devel
__f2fs_bio_alloc() won't fail due to memory pool backend, remove unneeded
__GFP_NOFAIL flag in __f2fs_bio_alloc().
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/data.c | 12 ++++--------
fs/f2fs/f2fs.h | 2 +-
2 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index baf12318ec64..3a4ece26928c 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -54,17 +54,13 @@ static inline struct bio *__f2fs_bio_alloc(gfp_t gfp_mask,
return bio_alloc_bioset(gfp_mask, nr_iovecs, &f2fs_bioset);
}
-struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool no_fail)
+struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio)
{
- struct bio *bio;
-
- if (no_fail) {
+ if (noio) {
/* No failure on bio allocation */
- bio = __f2fs_bio_alloc(GFP_NOIO, npages);
- if (!bio)
- bio = __f2fs_bio_alloc(GFP_NOIO | __GFP_NOFAIL, npages);
- return bio;
+ return __f2fs_bio_alloc(GFP_NOIO, npages);
}
+
if (time_to_inject(sbi, FAULT_ALLOC_BIO)) {
f2fs_show_injection_info(sbi, FAULT_ALLOC_BIO);
return NULL;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 5316ac3eacdf..65f569949d42 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3343,7 +3343,7 @@ void f2fs_destroy_checkpoint_caches(void);
*/
int __init f2fs_init_bioset(void);
void f2fs_destroy_bioset(void);
-struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool no_fail);
+struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio);
int f2fs_init_bio_entry_cache(void);
void f2fs_destroy_bio_entry_cache(void);
void f2fs_submit_bio(struct f2fs_sb_info *sbi,
--
2.18.0.rc1
_______________________________________________
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] 9+ messages in thread
* [f2fs-dev] [PATCH 2/3] f2fs: fix to avoid triggering IO in write path
2020-02-18 10:21 [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc Chao Yu
@ 2020-02-18 10:21 ` Chao Yu
2020-02-18 10:21 ` [f2fs-dev] [PATCH 3/3] f2fs: avoid unneeded barrier in do_checkpoint() Chao Yu
2020-02-19 2:49 ` [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc Jaegeuk Kim
2 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2020-02-18 10:21 UTC (permalink / raw)
To: jaegeuk; +Cc: linux-kernel, linux-f2fs-devel
If we are in write IO path, we need to avoid using GFP_KERNEL.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/compress.c | 2 +-
fs/f2fs/data.c | 24 +++++++++++++-----------
fs/f2fs/f2fs.h | 2 +-
3 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index b9ea531ffbb6..b1bc057ee266 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -653,7 +653,7 @@ static int prepare_compress_overwrite(struct compress_ctx *cc,
struct bio *bio = NULL;
ret = f2fs_read_multi_pages(cc, &bio, cc->cluster_size,
- &last_block_in_bio, false);
+ &last_block_in_bio, false, true);
f2fs_destroy_compress_ctx(cc);
if (ret)
goto release_pages;
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 3a4ece26928c..716277d6be48 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -924,14 +924,15 @@ static inline bool f2fs_need_verity(const struct inode *inode, pgoff_t idx)
static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr,
unsigned nr_pages, unsigned op_flag,
- pgoff_t first_idx)
+ pgoff_t first_idx, bool for_write)
{
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
struct bio *bio;
struct bio_post_read_ctx *ctx;
unsigned int post_read_steps = 0;
- bio = f2fs_bio_alloc(sbi, min_t(int, nr_pages, BIO_MAX_PAGES), false);
+ bio = f2fs_bio_alloc(sbi, min_t(int, nr_pages, BIO_MAX_PAGES),
+ for_write);
if (!bio)
return ERR_PTR(-ENOMEM);
f2fs_target_device(sbi, blkaddr, bio);
@@ -966,12 +967,12 @@ static void f2fs_release_read_bio(struct bio *bio)
/* This can handle encryption stuffs */
static int f2fs_submit_page_read(struct inode *inode, struct page *page,
- block_t blkaddr)
+ block_t blkaddr, bool for_write)
{
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
struct bio *bio;
- bio = f2fs_grab_read_bio(inode, blkaddr, 1, 0, page->index);
+ bio = f2fs_grab_read_bio(inode, blkaddr, 1, 0, page->index, for_write);
if (IS_ERR(bio))
return PTR_ERR(bio);
@@ -1157,7 +1158,7 @@ struct page *f2fs_get_read_data_page(struct inode *inode, pgoff_t index,
return page;
}
- err = f2fs_submit_page_read(inode, page, dn.data_blkaddr);
+ err = f2fs_submit_page_read(inode, page, dn.data_blkaddr, for_write);
if (err)
goto put_err;
return page;
@@ -1974,7 +1975,8 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
}
if (bio == NULL) {
bio = f2fs_grab_read_bio(inode, block_nr, nr_pages,
- is_readahead ? REQ_RAHEAD : 0, page->index);
+ is_readahead ? REQ_RAHEAD : 0, page->index,
+ false);
if (IS_ERR(bio)) {
ret = PTR_ERR(bio);
bio = NULL;
@@ -2009,7 +2011,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
#ifdef CONFIG_F2FS_FS_COMPRESSION
int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
unsigned nr_pages, sector_t *last_block_in_bio,
- bool is_readahead)
+ bool is_readahead, bool for_write)
{
struct dnode_of_data dn;
struct inode *inode = cc->inode;
@@ -2103,7 +2105,7 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
if (!bio) {
bio = f2fs_grab_read_bio(inode, blkaddr, nr_pages,
is_readahead ? REQ_RAHEAD : 0,
- page->index);
+ page->index, for_write);
if (IS_ERR(bio)) {
ret = PTR_ERR(bio);
bio = NULL;
@@ -2208,7 +2210,7 @@ int f2fs_mpage_readpages(struct address_space *mapping,
ret = f2fs_read_multi_pages(&cc, &bio,
max_nr_pages,
&last_block_in_bio,
- is_readahead);
+ is_readahead, false);
f2fs_destroy_compress_ctx(&cc);
if (ret)
goto set_error_page;
@@ -2251,7 +2253,7 @@ int f2fs_mpage_readpages(struct address_space *mapping,
ret = f2fs_read_multi_pages(&cc, &bio,
max_nr_pages,
&last_block_in_bio,
- is_readahead);
+ is_readahead, false);
f2fs_destroy_compress_ctx(&cc);
}
}
@@ -3291,7 +3293,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
err = -EFSCORRUPTED;
goto fail;
}
- err = f2fs_submit_page_read(inode, page, blkaddr);
+ err = f2fs_submit_page_read(inode, page, blkaddr, true);
if (err)
goto fail;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 65f569949d42..5d047c0bbbbb 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3799,7 +3799,7 @@ int f2fs_write_multi_pages(struct compress_ctx *cc,
int f2fs_is_compressed_cluster(struct inode *inode, pgoff_t index);
int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
unsigned nr_pages, sector_t *last_block_in_bio,
- bool is_readahead);
+ bool is_readahead, bool for_write);
struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc);
void f2fs_free_dic(struct decompress_io_ctx *dic);
void f2fs_decompress_end_io(struct page **rpages,
--
2.18.0.rc1
_______________________________________________
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] 9+ messages in thread
* [f2fs-dev] [PATCH 3/3] f2fs: avoid unneeded barrier in do_checkpoint()
2020-02-18 10:21 [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc Chao Yu
2020-02-18 10:21 ` [f2fs-dev] [PATCH 2/3] f2fs: fix to avoid triggering IO in write path Chao Yu
@ 2020-02-18 10:21 ` Chao Yu
2020-02-19 2:51 ` Jaegeuk Kim
2020-02-19 2:49 ` [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc Jaegeuk Kim
2 siblings, 1 reply; 9+ messages in thread
From: Chao Yu @ 2020-02-18 10:21 UTC (permalink / raw)
To: jaegeuk; +Cc: linux-kernel, linux-f2fs-devel
We don't need to wait all dirty page submitting IO twice,
remove unneeded wait step.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/checkpoint.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 751815cb4c2b..9c88fb3d255a 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -1384,8 +1384,6 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
/* Flush all the NAT/SIT pages */
f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_CP_META_IO);
- /* Wait for all dirty meta pages to be submitted for IO */
- f2fs_wait_on_all_pages(sbi, F2FS_DIRTY_META);
/*
* modify checkpoint
--
2.18.0.rc1
_______________________________________________
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] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc
2020-02-18 10:21 [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc Chao Yu
2020-02-18 10:21 ` [f2fs-dev] [PATCH 2/3] f2fs: fix to avoid triggering IO in write path Chao Yu
2020-02-18 10:21 ` [f2fs-dev] [PATCH 3/3] f2fs: avoid unneeded barrier in do_checkpoint() Chao Yu
@ 2020-02-19 2:49 ` Jaegeuk Kim
2020-02-19 3:12 ` Chao Yu
2 siblings, 1 reply; 9+ messages in thread
From: Jaegeuk Kim @ 2020-02-19 2:49 UTC (permalink / raw)
To: Chao Yu; +Cc: linux-kernel, linux-f2fs-devel
On 02/18, Chao Yu wrote:
> __f2fs_bio_alloc() won't fail due to memory pool backend, remove unneeded
> __GFP_NOFAIL flag in __f2fs_bio_alloc().
It it safe for old kernels as well when thinking backports?
>
> Signed-off-by: Chao Yu <yuchao0@huawei.com>
> ---
> fs/f2fs/data.c | 12 ++++--------
> fs/f2fs/f2fs.h | 2 +-
> 2 files changed, 5 insertions(+), 9 deletions(-)
>
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index baf12318ec64..3a4ece26928c 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -54,17 +54,13 @@ static inline struct bio *__f2fs_bio_alloc(gfp_t gfp_mask,
> return bio_alloc_bioset(gfp_mask, nr_iovecs, &f2fs_bioset);
> }
>
> -struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool no_fail)
> +struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio)
> {
> - struct bio *bio;
> -
> - if (no_fail) {
> + if (noio) {
> /* No failure on bio allocation */
> - bio = __f2fs_bio_alloc(GFP_NOIO, npages);
> - if (!bio)
> - bio = __f2fs_bio_alloc(GFP_NOIO | __GFP_NOFAIL, npages);
> - return bio;
> + return __f2fs_bio_alloc(GFP_NOIO, npages);
> }
> +
> if (time_to_inject(sbi, FAULT_ALLOC_BIO)) {
> f2fs_show_injection_info(sbi, FAULT_ALLOC_BIO);
> return NULL;
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 5316ac3eacdf..65f569949d42 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -3343,7 +3343,7 @@ void f2fs_destroy_checkpoint_caches(void);
> */
> int __init f2fs_init_bioset(void);
> void f2fs_destroy_bioset(void);
> -struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool no_fail);
> +struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio);
> int f2fs_init_bio_entry_cache(void);
> void f2fs_destroy_bio_entry_cache(void);
> void f2fs_submit_bio(struct f2fs_sb_info *sbi,
> --
> 2.18.0.rc1
_______________________________________________
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] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] f2fs: avoid unneeded barrier in do_checkpoint()
2020-02-18 10:21 ` [f2fs-dev] [PATCH 3/3] f2fs: avoid unneeded barrier in do_checkpoint() Chao Yu
@ 2020-02-19 2:51 ` Jaegeuk Kim
2020-02-19 3:18 ` Chao Yu
0 siblings, 1 reply; 9+ messages in thread
From: Jaegeuk Kim @ 2020-02-19 2:51 UTC (permalink / raw)
To: Chao Yu; +Cc: linux-kernel, linux-f2fs-devel
On 02/18, Chao Yu wrote:
> We don't need to wait all dirty page submitting IO twice,
> remove unneeded wait step.
What happens if checkpoint and other meta writs are reordered?
>
> Signed-off-by: Chao Yu <yuchao0@huawei.com>
> ---
> fs/f2fs/checkpoint.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
> index 751815cb4c2b..9c88fb3d255a 100644
> --- a/fs/f2fs/checkpoint.c
> +++ b/fs/f2fs/checkpoint.c
> @@ -1384,8 +1384,6 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
>
> /* Flush all the NAT/SIT pages */
> f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_CP_META_IO);
> - /* Wait for all dirty meta pages to be submitted for IO */
> - f2fs_wait_on_all_pages(sbi, F2FS_DIRTY_META);
>
> /*
> * modify checkpoint
> --
> 2.18.0.rc1
_______________________________________________
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] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc
2020-02-19 2:49 ` [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc Jaegeuk Kim
@ 2020-02-19 3:12 ` Chao Yu
0 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2020-02-19 3:12 UTC (permalink / raw)
To: Jaegeuk Kim; +Cc: linux-kernel, linux-f2fs-devel
On 2020/2/19 10:49, Jaegeuk Kim wrote:
> On 02/18, Chao Yu wrote:
>> __f2fs_bio_alloc() won't fail due to memory pool backend, remove unneeded
>> __GFP_NOFAIL flag in __f2fs_bio_alloc().
>
> It it safe for old kernels as well when thinking backports?
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 134) struct bio *bio = mempool_alloc(bs->bio_pool, gfp_mask);
It looks if we have a backend mempool, we will never fail to allocate bio
for very long time, we don't need to backport to 2.6.x kernel, right?
Thanks,
>
>>
>> Signed-off-by: Chao Yu <yuchao0@huawei.com>
>> ---
>> fs/f2fs/data.c | 12 ++++--------
>> fs/f2fs/f2fs.h | 2 +-
>> 2 files changed, 5 insertions(+), 9 deletions(-)
>>
>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
>> index baf12318ec64..3a4ece26928c 100644
>> --- a/fs/f2fs/data.c
>> +++ b/fs/f2fs/data.c
>> @@ -54,17 +54,13 @@ static inline struct bio *__f2fs_bio_alloc(gfp_t gfp_mask,
>> return bio_alloc_bioset(gfp_mask, nr_iovecs, &f2fs_bioset);
>> }
>>
>> -struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool no_fail)
>> +struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio)
>> {
>> - struct bio *bio;
>> -
>> - if (no_fail) {
>> + if (noio) {
>> /* No failure on bio allocation */
>> - bio = __f2fs_bio_alloc(GFP_NOIO, npages);
>> - if (!bio)
>> - bio = __f2fs_bio_alloc(GFP_NOIO | __GFP_NOFAIL, npages);
>> - return bio;
>> + return __f2fs_bio_alloc(GFP_NOIO, npages);
>> }
>> +
>> if (time_to_inject(sbi, FAULT_ALLOC_BIO)) {
>> f2fs_show_injection_info(sbi, FAULT_ALLOC_BIO);
>> return NULL;
>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
>> index 5316ac3eacdf..65f569949d42 100644
>> --- a/fs/f2fs/f2fs.h
>> +++ b/fs/f2fs/f2fs.h
>> @@ -3343,7 +3343,7 @@ void f2fs_destroy_checkpoint_caches(void);
>> */
>> int __init f2fs_init_bioset(void);
>> void f2fs_destroy_bioset(void);
>> -struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool no_fail);
>> +struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio);
>> int f2fs_init_bio_entry_cache(void);
>> void f2fs_destroy_bio_entry_cache(void);
>> void f2fs_submit_bio(struct f2fs_sb_info *sbi,
>> --
>> 2.18.0.rc1
> .
>
_______________________________________________
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] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] f2fs: avoid unneeded barrier in do_checkpoint()
2020-02-19 2:51 ` Jaegeuk Kim
@ 2020-02-19 3:18 ` Chao Yu
2020-02-24 22:00 ` Jaegeuk Kim
0 siblings, 1 reply; 9+ messages in thread
From: Chao Yu @ 2020-02-19 3:18 UTC (permalink / raw)
To: Jaegeuk Kim; +Cc: linux-kernel, linux-f2fs-devel
On 2020/2/19 10:51, Jaegeuk Kim wrote:
> On 02/18, Chao Yu wrote:
>> We don't need to wait all dirty page submitting IO twice,
>> remove unneeded wait step.
>
> What happens if checkpoint and other meta writs are reordered?
checkpoint can be done as following:
1. All meta except last cp-park of checkpoint area.
2. last cp-park of checkpoint area
So we only need to keep barrier in between step 1 and 2, we don't need
to care about the write order of meta in step 1, right?
Thanks,
>
>>
>> Signed-off-by: Chao Yu <yuchao0@huawei.com>
>> ---
>> fs/f2fs/checkpoint.c | 2 --
>> 1 file changed, 2 deletions(-)
>>
>> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
>> index 751815cb4c2b..9c88fb3d255a 100644
>> --- a/fs/f2fs/checkpoint.c
>> +++ b/fs/f2fs/checkpoint.c
>> @@ -1384,8 +1384,6 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
>>
>> /* Flush all the NAT/SIT pages */
>> f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_CP_META_IO);
>> - /* Wait for all dirty meta pages to be submitted for IO */
>> - f2fs_wait_on_all_pages(sbi, F2FS_DIRTY_META);
>>
>> /*
>> * modify checkpoint
>> --
>> 2.18.0.rc1
> .
>
_______________________________________________
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] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] f2fs: avoid unneeded barrier in do_checkpoint()
2020-02-19 3:18 ` Chao Yu
@ 2020-02-24 22:00 ` Jaegeuk Kim
2020-02-25 6:10 ` Chao Yu
0 siblings, 1 reply; 9+ messages in thread
From: Jaegeuk Kim @ 2020-02-24 22:00 UTC (permalink / raw)
To: Chao Yu; +Cc: linux-kernel, linux-f2fs-devel
On 02/19, Chao Yu wrote:
> On 2020/2/19 10:51, Jaegeuk Kim wrote:
> > On 02/18, Chao Yu wrote:
> >> We don't need to wait all dirty page submitting IO twice,
> >> remove unneeded wait step.
> >
> > What happens if checkpoint and other meta writs are reordered?
>
> checkpoint can be done as following:
>
> 1. All meta except last cp-park of checkpoint area.
> 2. last cp-park of checkpoint area
>
> So we only need to keep barrier in between step 1 and 2, we don't need
> to care about the write order of meta in step 1, right?
Ah, let me integrate this patch into Sahitya's patch.
f2fs: fix the panic in do_checkpoint()
>
> Thanks,
>
> >
> >>
> >> Signed-off-by: Chao Yu <yuchao0@huawei.com>
> >> ---
> >> fs/f2fs/checkpoint.c | 2 --
> >> 1 file changed, 2 deletions(-)
> >>
> >> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
> >> index 751815cb4c2b..9c88fb3d255a 100644
> >> --- a/fs/f2fs/checkpoint.c
> >> +++ b/fs/f2fs/checkpoint.c
> >> @@ -1384,8 +1384,6 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
> >>
> >> /* Flush all the NAT/SIT pages */
> >> f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_CP_META_IO);
> >> - /* Wait for all dirty meta pages to be submitted for IO */
> >> - f2fs_wait_on_all_pages(sbi, F2FS_DIRTY_META);
> >>
> >> /*
> >> * modify checkpoint
> >> --
> >> 2.18.0.rc1
> > .
> >
_______________________________________________
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] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] f2fs: avoid unneeded barrier in do_checkpoint()
2020-02-24 22:00 ` Jaegeuk Kim
@ 2020-02-25 6:10 ` Chao Yu
0 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2020-02-25 6:10 UTC (permalink / raw)
To: Jaegeuk Kim; +Cc: linux-kernel, linux-f2fs-devel
On 2020/2/25 6:00, Jaegeuk Kim wrote:
> On 02/19, Chao Yu wrote:
>> On 2020/2/19 10:51, Jaegeuk Kim wrote:
>>> On 02/18, Chao Yu wrote:
>>>> We don't need to wait all dirty page submitting IO twice,
>>>> remove unneeded wait step.
>>>
>>> What happens if checkpoint and other meta writs are reordered?
>>
>> checkpoint can be done as following:
>>
>> 1. All meta except last cp-park of checkpoint area.
>> 2. last cp-park of checkpoint area
>>
>> So we only need to keep barrier in between step 1 and 2, we don't need
>> to care about the write order of meta in step 1, right?
>
> Ah, let me integrate this patch into Sahitya's patch.>
> f2fs: fix the panic in do_checkpoint()
No problem.
Thanks,
>
>>
>> Thanks,
>>
>>>
>>>>
>>>> Signed-off-by: Chao Yu <yuchao0@huawei.com>
>>>> ---
>>>> fs/f2fs/checkpoint.c | 2 --
>>>> 1 file changed, 2 deletions(-)
>>>>
>>>> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
>>>> index 751815cb4c2b..9c88fb3d255a 100644
>>>> --- a/fs/f2fs/checkpoint.c
>>>> +++ b/fs/f2fs/checkpoint.c
>>>> @@ -1384,8 +1384,6 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
>>>>
>>>> /* Flush all the NAT/SIT pages */
>>>> f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_CP_META_IO);
>>>> - /* Wait for all dirty meta pages to be submitted for IO */
>>>> - f2fs_wait_on_all_pages(sbi, F2FS_DIRTY_META);
>>>>
>>>> /*
>>>> * modify checkpoint
>>>> --
>>>> 2.18.0.rc1
>>> .
>>>
> .
>
_______________________________________________
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] 9+ messages in thread
end of thread, other threads:[~2020-02-25 6:10 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-18 10:21 [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc Chao Yu
2020-02-18 10:21 ` [f2fs-dev] [PATCH 2/3] f2fs: fix to avoid triggering IO in write path Chao Yu
2020-02-18 10:21 ` [f2fs-dev] [PATCH 3/3] f2fs: avoid unneeded barrier in do_checkpoint() Chao Yu
2020-02-19 2:51 ` Jaegeuk Kim
2020-02-19 3:18 ` Chao Yu
2020-02-24 22:00 ` Jaegeuk Kim
2020-02-25 6:10 ` Chao Yu
2020-02-19 2:49 ` [f2fs-dev] [PATCH 1/3] f2fs: avoid __GFP_NOFAIL in f2fs_bio_alloc Jaegeuk Kim
2020-02-19 3:12 ` 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).