Messages in this thread | | | Subject | Re: 答复: [f2fs-dev] [PATCH RESEND] f2fs: v alidate before set/clear free nat bitmap | From | Chao Yu <> | Date | Tue, 14 Nov 2017 14:27:42 +0800 |
| |
On 2017/11/14 13:59, LiFan wrote: > Sorry, it seems my company mailbox single mail would cut the long line short > automatically. > It's fine in my outlook mail, so I overlooked.
Maybe 'git send-email' can be one of your options to save some work in your email client? ;)
Thanks,
> I haven't find a way to solve that yet, please hold both of my new patch. > I will fix it as soon as possible. > > > -----邮件原件----- > 发件人: Jaegeuk Kim [mailto:jaegeuk@kernel.org] > 发送时间: 2017年11月14日 12:54 > 收件人: LiFan > 抄送: 'Chao Yu'; 'Chao Yu'; linux-kernel@vger.kernel.org; > linux-f2fs-devel@lists.sourceforge.net > 主题: Re: [f2fs-dev] [PATCH RESEND] f2fs: validate before set/clear free nat > bitmap > > Sorry, I can't merge this patch due to wrong format. > > On 11/11, LiFan wrote: >> In flush_nat_entries, all dirty nats will be flushed and if their new >> address isn't NULL_ADDR, their bitmaps will be updated, the >> free_nid_count of the bitmaps will be increased regardless of whether >> the nats have already been occupied before. This could lead to wrong >> free_nid_count. >> So this patch checks the status of the bits before actually set/clear > them. >> >> Fixes: 586d1492f301 ("f2fs: skip scanning free nid bitmap of full NAT >> blocks") >> >> Signed-off-by: Fan li <fanofcode.li@samsung.com> >> --- >> fs/f2fs/node.c | 17 ++++++++++------- >> 1 file changed, 10 insertions(+), 7 deletions(-) >> >> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index d234c6e..b965a53 >> 100644 >> --- a/fs/f2fs/node.c >> +++ b/fs/f2fs/node.c >> @@ -1906,15 +1906,18 @@ static void update_free_nid_bitmap(struct >> f2fs_sb_info *sbi, nid_t nid, >> if (!test_bit_le(nat_ofs, nm_i->nat_block_bitmap)) >> return; >> >> - if (set) >> + if (set) { >> + if (test_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs])) >> + return; >> __set_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); >> - else >> - __clear_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); >> - >> - if (set) >> nm_i->free_nid_count[nat_ofs]++; >> - else if (!build) >> - nm_i->free_nid_count[nat_ofs]--; >> + } else { >> + if (!test_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs])) >> + return; >> + __clear_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); >> + if (!build) >> + nm_i->free_nid_count[nat_ofs]--; >> + } >> } >> >> static void scan_nat_page(struct f2fs_sb_info *sbi, >> -- >> 2.7.4 >> > > > > >
| |