* [PATCH 1/4] f2fs: introduce __wait_one_discard_bio
@ 2017-06-05 10:29 ` Chao Yu
0 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 10:29 UTC (permalink / raw)
To: jaegeuk; +Cc: linux-f2fs-devel, linux-kernel, chao, Chao Yu
In order to avoid copied codes.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/segment.c | 33 +++++++++++++++++----------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 4e073f65eef4..4ec40563e86d 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -995,6 +995,20 @@ static void __issue_discard_cmd(struct f2fs_sb_info *sbi, bool issue_cond)
mutex_unlock(&dcc->cmd_lock);
}
+static void __wait_one_discard_bio(struct f2fs_sb_info *sbi,
+ struct discard_cmd *dc)
+{
+ struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+
+ wait_for_completion_io(&dc->wait);
+ mutex_lock(&dcc->cmd_lock);
+ f2fs_bug_on(sbi, dc->state != D_DONE);
+ dc->ref--;
+ if (!dc->ref)
+ __remove_discard_cmd(sbi, dc);
+ mutex_unlock(&dcc->cmd_lock);
+}
+
static void __wait_discard_cmd(struct f2fs_sb_info *sbi, bool wait_cond)
{
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
@@ -1019,13 +1033,7 @@ static void __wait_discard_cmd(struct f2fs_sb_info *sbi, bool wait_cond)
mutex_unlock(&dcc->cmd_lock);
if (need_wait) {
- wait_for_completion_io(&dc->wait);
- mutex_lock(&dcc->cmd_lock);
- f2fs_bug_on(sbi, dc->state != D_DONE);
- dc->ref--;
- if (!dc->ref)
- __remove_discard_cmd(sbi, dc);
- mutex_unlock(&dcc->cmd_lock);
+ __wait_one_discard_bio(sbi, dc);
goto next;
}
}
@@ -1049,15 +1057,8 @@ void f2fs_wait_discard_bio(struct f2fs_sb_info *sbi, block_t blkaddr)
}
mutex_unlock(&dcc->cmd_lock);
- if (need_wait) {
- wait_for_completion_io(&dc->wait);
- mutex_lock(&dcc->cmd_lock);
- f2fs_bug_on(sbi, dc->state != D_DONE);
- dc->ref--;
- if (!dc->ref)
- __remove_discard_cmd(sbi, dc);
- mutex_unlock(&dcc->cmd_lock);
- }
+ if (need_wait)
+ __wait_one_discard_bio(sbi, dc);
}
/* This comes from f2fs_put_super */
--
2.13.0.67.g10c78a162fa8
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 1/4] f2fs: introduce __wait_one_discard_bio
@ 2017-06-05 10:29 ` Chao Yu
0 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 10:29 UTC (permalink / raw)
To: jaegeuk; +Cc: chao, linux-kernel, linux-f2fs-devel
In order to avoid copied codes.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/segment.c | 33 +++++++++++++++++----------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 4e073f65eef4..4ec40563e86d 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -995,6 +995,20 @@ static void __issue_discard_cmd(struct f2fs_sb_info *sbi, bool issue_cond)
mutex_unlock(&dcc->cmd_lock);
}
+static void __wait_one_discard_bio(struct f2fs_sb_info *sbi,
+ struct discard_cmd *dc)
+{
+ struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+
+ wait_for_completion_io(&dc->wait);
+ mutex_lock(&dcc->cmd_lock);
+ f2fs_bug_on(sbi, dc->state != D_DONE);
+ dc->ref--;
+ if (!dc->ref)
+ __remove_discard_cmd(sbi, dc);
+ mutex_unlock(&dcc->cmd_lock);
+}
+
static void __wait_discard_cmd(struct f2fs_sb_info *sbi, bool wait_cond)
{
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
@@ -1019,13 +1033,7 @@ static void __wait_discard_cmd(struct f2fs_sb_info *sbi, bool wait_cond)
mutex_unlock(&dcc->cmd_lock);
if (need_wait) {
- wait_for_completion_io(&dc->wait);
- mutex_lock(&dcc->cmd_lock);
- f2fs_bug_on(sbi, dc->state != D_DONE);
- dc->ref--;
- if (!dc->ref)
- __remove_discard_cmd(sbi, dc);
- mutex_unlock(&dcc->cmd_lock);
+ __wait_one_discard_bio(sbi, dc);
goto next;
}
}
@@ -1049,15 +1057,8 @@ void f2fs_wait_discard_bio(struct f2fs_sb_info *sbi, block_t blkaddr)
}
mutex_unlock(&dcc->cmd_lock);
- if (need_wait) {
- wait_for_completion_io(&dc->wait);
- mutex_lock(&dcc->cmd_lock);
- f2fs_bug_on(sbi, dc->state != D_DONE);
- dc->ref--;
- if (!dc->ref)
- __remove_discard_cmd(sbi, dc);
- mutex_unlock(&dcc->cmd_lock);
- }
+ if (need_wait)
+ __wait_one_discard_bio(sbi, dc);
}
/* This comes from f2fs_put_super */
--
2.13.0.67.g10c78a162fa8
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/4] f2fs: add f2fs_bug_on in __remove_discard_cmd
2017-06-05 10:29 ` Chao Yu
@ 2017-06-05 10:29 ` Chao Yu
-1 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 10:29 UTC (permalink / raw)
To: jaegeuk; +Cc: linux-f2fs-devel, linux-kernel, chao, Chao Yu
Recently, discard related codes have changed a lot, so add f2fs_bug_on to
detect potential bug.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/segment.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 4ec40563e86d..9a44aca8d2c5 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -739,6 +739,8 @@ static void __remove_discard_cmd(struct f2fs_sb_info *sbi,
{
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+ f2fs_bug_on(sbi, dc->ref);
+
if (dc->error == -EOPNOTSUPP)
dc->error = 0;
--
2.13.0.67.g10c78a162fa8
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/4] f2fs: add f2fs_bug_on in __remove_discard_cmd
@ 2017-06-05 10:29 ` Chao Yu
0 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 10:29 UTC (permalink / raw)
To: jaegeuk; +Cc: linux-f2fs-devel, linux-kernel, chao, Chao Yu
Recently, discard related codes have changed a lot, so add f2fs_bug_on to
detect potential bug.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/segment.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 4ec40563e86d..9a44aca8d2c5 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -739,6 +739,8 @@ static void __remove_discard_cmd(struct f2fs_sb_info *sbi,
{
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+ f2fs_bug_on(sbi, dc->ref);
+
if (dc->error == -EOPNOTSUPP)
dc->error = 0;
--
2.13.0.67.g10c78a162fa8
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/4] f2fs: don't track newly allocated nat entry in list
2017-06-05 10:29 ` Chao Yu
@ 2017-06-05 10:29 ` Chao Yu
-1 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 10:29 UTC (permalink / raw)
To: jaegeuk; +Cc: linux-f2fs-devel, linux-kernel, chao, Chao Yu
We will never persist newly allocated nat entries during checkpoint(), so
we don't need to track such nat entries in nat dirty list in order to
avoid:
- more latency during traversing dirty list;
- sorting nat sets incorrectly due to recording wrong entry_cnt in nat
entry set.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/node.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index d22db8ce0a69..05700e54f91e 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -158,9 +158,6 @@ static void __set_nat_cache_dirty(struct f2fs_nm_info *nm_i,
nid_t set = NAT_BLOCK_OFFSET(ne->ni.nid);
struct nat_entry_set *head;
- if (get_nat_flag(ne, IS_DIRTY))
- return;
-
head = radix_tree_lookup(&nm_i->nat_set_root, set);
if (!head) {
head = f2fs_kmem_cache_alloc(nat_entry_set_slab, GFP_NOFS);
@@ -171,10 +168,18 @@ static void __set_nat_cache_dirty(struct f2fs_nm_info *nm_i,
head->entry_cnt = 0;
f2fs_radix_tree_insert(&nm_i->nat_set_root, set, head);
}
- list_move_tail(&ne->list, &head->entry_list);
+
+ if (get_nat_flag(ne, IS_DIRTY))
+ goto refresh_list;
+
nm_i->dirty_nat_cnt++;
head->entry_cnt++;
set_nat_flag(ne, IS_DIRTY, true);
+refresh_list:
+ if (nat_get_blkaddr(ne) == NEW_ADDR)
+ list_del_init(&ne->list);
+ else
+ list_move_tail(&ne->list, &head->entry_list);
}
static void __clear_nat_cache_dirty(struct f2fs_nm_info *nm_i,
@@ -2423,8 +2428,7 @@ static void __flush_nat_entry_set(struct f2fs_sb_info *sbi,
nid_t nid = nat_get_nid(ne);
int offset;
- if (nat_get_blkaddr(ne) == NEW_ADDR)
- continue;
+ f2fs_bug_on(sbi, nat_get_blkaddr(ne) == NEW_ADDR);
if (to_journal) {
offset = lookup_journal_in_cursum(journal,
--
2.13.0.67.g10c78a162fa8
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/4] f2fs: don't track newly allocated nat entry in list
@ 2017-06-05 10:29 ` Chao Yu
0 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 10:29 UTC (permalink / raw)
To: jaegeuk; +Cc: chao, linux-kernel, linux-f2fs-devel
We will never persist newly allocated nat entries during checkpoint(), so
we don't need to track such nat entries in nat dirty list in order to
avoid:
- more latency during traversing dirty list;
- sorting nat sets incorrectly due to recording wrong entry_cnt in nat
entry set.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/node.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index d22db8ce0a69..05700e54f91e 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -158,9 +158,6 @@ static void __set_nat_cache_dirty(struct f2fs_nm_info *nm_i,
nid_t set = NAT_BLOCK_OFFSET(ne->ni.nid);
struct nat_entry_set *head;
- if (get_nat_flag(ne, IS_DIRTY))
- return;
-
head = radix_tree_lookup(&nm_i->nat_set_root, set);
if (!head) {
head = f2fs_kmem_cache_alloc(nat_entry_set_slab, GFP_NOFS);
@@ -171,10 +168,18 @@ static void __set_nat_cache_dirty(struct f2fs_nm_info *nm_i,
head->entry_cnt = 0;
f2fs_radix_tree_insert(&nm_i->nat_set_root, set, head);
}
- list_move_tail(&ne->list, &head->entry_list);
+
+ if (get_nat_flag(ne, IS_DIRTY))
+ goto refresh_list;
+
nm_i->dirty_nat_cnt++;
head->entry_cnt++;
set_nat_flag(ne, IS_DIRTY, true);
+refresh_list:
+ if (nat_get_blkaddr(ne) == NEW_ADDR)
+ list_del_init(&ne->list);
+ else
+ list_move_tail(&ne->list, &head->entry_list);
}
static void __clear_nat_cache_dirty(struct f2fs_nm_info *nm_i,
@@ -2423,8 +2428,7 @@ static void __flush_nat_entry_set(struct f2fs_sb_info *sbi,
nid_t nid = nat_get_nid(ne);
int offset;
- if (nat_get_blkaddr(ne) == NEW_ADDR)
- continue;
+ f2fs_bug_on(sbi, nat_get_blkaddr(ne) == NEW_ADDR);
if (to_journal) {
offset = lookup_journal_in_cursum(journal,
--
2.13.0.67.g10c78a162fa8
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/4] f2fs: use bio_set_op_attrs
2017-06-05 10:29 ` Chao Yu
@ 2017-06-05 10:29 ` Chao Yu
-1 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 10:29 UTC (permalink / raw)
To: jaegeuk; +Cc: linux-f2fs-devel, linux-kernel, chao, Chao Yu
Init bio->bi_opf with bio_set_op_attrs instead of opened code.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/data.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 2ed90f5db832..204150cf6561 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1962,7 +1962,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
err = PTR_ERR(bio);
goto fail;
}
- bio->bi_opf = REQ_OP_READ;
+ bio_set_op_attrs(bio, REQ_OP_READ, 0);
if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
bio_put(bio);
err = -EFAULT;
--
2.13.0.67.g10c78a162fa8
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/4] f2fs: use bio_set_op_attrs
@ 2017-06-05 10:29 ` Chao Yu
0 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 10:29 UTC (permalink / raw)
To: jaegeuk; +Cc: chao, linux-kernel, linux-f2fs-devel
Init bio->bi_opf with bio_set_op_attrs instead of opened code.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
fs/f2fs/data.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 2ed90f5db832..204150cf6561 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1962,7 +1962,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
err = PTR_ERR(bio);
goto fail;
}
- bio->bi_opf = REQ_OP_READ;
+ bio_set_op_attrs(bio, REQ_OP_READ, 0);
if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
bio_put(bio);
err = -EFAULT;
--
2.13.0.67.g10c78a162fa8
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] f2fs: use bio_set_op_attrs
2017-06-05 10:29 ` Chao Yu
(?)
@ 2017-06-05 10:39 ` Christoph Hellwig
2017-06-05 11:05 ` Chao Yu
-1 siblings, 1 reply; 11+ messages in thread
From: Christoph Hellwig @ 2017-06-05 10:39 UTC (permalink / raw)
To: Chao Yu; +Cc: jaegeuk, linux-f2fs-devel, linux-kernel, chao
On Mon, Jun 05, 2017 at 06:29:09PM +0800, Chao Yu wrote:
> Init bio->bi_opf with bio_set_op_attrs instead of opened code.
>
> Signed-off-by: Chao Yu <yuchao0@huawei.com>
> ---
> fs/f2fs/data.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index 2ed90f5db832..204150cf6561 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -1962,7 +1962,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
> err = PTR_ERR(bio);
> goto fail;
> }
> - bio->bi_opf = REQ_OP_READ;
> + bio_set_op_attrs(bio, REQ_OP_READ, 0);
NAK. Please read the comment next to bio_set_op_attrs.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] f2fs: use bio_set_op_attrs
2017-06-05 10:39 ` Christoph Hellwig
@ 2017-06-05 11:05 ` Chao Yu
0 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 11:05 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: jaegeuk, linux-f2fs-devel, linux-kernel, chao
On 2017/6/5 18:39, Christoph Hellwig wrote:
> On Mon, Jun 05, 2017 at 06:29:09PM +0800, Chao Yu wrote:
>> Init bio->bi_opf with bio_set_op_attrs instead of opened code.
>>
>> Signed-off-by: Chao Yu <yuchao0@huawei.com>
>> ---
>> fs/f2fs/data.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
>> index 2ed90f5db832..204150cf6561 100644
>> --- a/fs/f2fs/data.c
>> +++ b/fs/f2fs/data.c
>> @@ -1962,7 +1962,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
>> err = PTR_ERR(bio);
>> goto fail;
>> }
>> - bio->bi_opf = REQ_OP_READ;
>> + bio_set_op_attrs(bio, REQ_OP_READ, 0);
>
> NAK. Please read the comment next to bio_set_op_attrs.
Oh, bio_set_op_attrs is obsolete. :(
Alright, let's ignore this patch.
Thanks,
>
> .
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] f2fs: use bio_set_op_attrs
@ 2017-06-05 11:05 ` Chao Yu
0 siblings, 0 replies; 11+ messages in thread
From: Chao Yu @ 2017-06-05 11:05 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: jaegeuk, linux-f2fs-devel, linux-kernel, chao
On 2017/6/5 18:39, Christoph Hellwig wrote:
> On Mon, Jun 05, 2017 at 06:29:09PM +0800, Chao Yu wrote:
>> Init bio->bi_opf with bio_set_op_attrs instead of opened code.
>>
>> Signed-off-by: Chao Yu <yuchao0@huawei.com>
>> ---
>> fs/f2fs/data.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
>> index 2ed90f5db832..204150cf6561 100644
>> --- a/fs/f2fs/data.c
>> +++ b/fs/f2fs/data.c
>> @@ -1962,7 +1962,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
>> err = PTR_ERR(bio);
>> goto fail;
>> }
>> - bio->bi_opf = REQ_OP_READ;
>> + bio_set_op_attrs(bio, REQ_OP_READ, 0);
>
> NAK. Please read the comment next to bio_set_op_attrs.
Oh, bio_set_op_attrs is obsolete. :(
Alright, let's ignore this patch.
Thanks,
>
> .
>
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-06-05 11:07 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-05 10:29 [PATCH 1/4] f2fs: introduce __wait_one_discard_bio Chao Yu
2017-06-05 10:29 ` Chao Yu
2017-06-05 10:29 ` [PATCH 2/4] f2fs: add f2fs_bug_on in __remove_discard_cmd Chao Yu
2017-06-05 10:29 ` Chao Yu
2017-06-05 10:29 ` [PATCH 3/4] f2fs: don't track newly allocated nat entry in list Chao Yu
2017-06-05 10:29 ` Chao Yu
2017-06-05 10:29 ` [PATCH 4/4] f2fs: use bio_set_op_attrs Chao Yu
2017-06-05 10:29 ` Chao Yu
2017-06-05 10:39 ` Christoph Hellwig
2017-06-05 11:05 ` Chao Yu
2017-06-05 11:05 ` 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.