Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1657494 > unrolled thread
| Started by | Chao Yu <yuchao0@huawei.com> |
|---|---|
| First post | 2017-06-05 12:40 +0200 |
| Last post | 2017-06-05 12:40 +0200 |
| Articles | 5 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH 1/4] f2fs: introduce __wait_one_discard_bio Chao Yu <yuchao0@huawei.com> - 2017-06-05 12:40 +0200
[PATCH 4/4] f2fs: use bio_set_op_attrs Chao Yu <yuchao0@huawei.com> - 2017-06-05 12:40 +0200
Re: [PATCH 4/4] f2fs: use bio_set_op_attrs Christoph Hellwig <hch@infradead.org> - 2017-06-05 12:50 +0200
Re: [PATCH 4/4] f2fs: use bio_set_op_attrs Chao Yu <yuchao0@huawei.com> - 2017-06-05 13:10 +0200
[PATCH 3/4] f2fs: don't track newly allocated nat entry in list Chao Yu <yuchao0@huawei.com> - 2017-06-05 12:40 +0200
| From | Chao Yu <yuchao0@huawei.com> |
|---|---|
| Date | 2017-06-05 12:40 +0200 |
| Subject | [PATCH 1/4] f2fs: introduce __wait_one_discard_bio |
| Message-ID | <tOXAu-1HK-9@gated-at.bofh.it> |
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
[toc] | [next] | [standalone]
| From | Chao Yu <yuchao0@huawei.com> |
|---|---|
| Date | 2017-06-05 12:40 +0200 |
| Subject | [PATCH 4/4] f2fs: use bio_set_op_attrs |
| Message-ID | <tOXAv-1HK-27@gated-at.bofh.it> |
| In reply to | #1657494 |
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
[toc] | [prev] | [next] | [standalone]
| From | Christoph Hellwig <hch@infradead.org> |
|---|---|
| Date | 2017-06-05 12:50 +0200 |
| Subject | Re: [PATCH 4/4] f2fs: use bio_set_op_attrs |
| Message-ID | <tOXK9-1L4-11@gated-at.bofh.it> |
| In reply to | #1657496 |
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.
[toc] | [prev] | [next] | [standalone]
| From | Chao Yu <yuchao0@huawei.com> |
|---|---|
| Date | 2017-06-05 13:10 +0200 |
| Subject | Re: [PATCH 4/4] f2fs: use bio_set_op_attrs |
| Message-ID | <tOY3v-26G-11@gated-at.bofh.it> |
| In reply to | #1657505 |
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, > > . >
[toc] | [prev] | [next] | [standalone]
| From | Chao Yu <yuchao0@huawei.com> |
|---|---|
| Date | 2017-06-05 12:40 +0200 |
| Subject | [PATCH 3/4] f2fs: don't track newly allocated nat entry in list |
| Message-ID | <tOXAv-1HK-29@gated-at.bofh.it> |
| In reply to | #1657494 |
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
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web