* [PATCH] f2fs: initialize both two copies of NAT and SIT area @ 2015-07-23 1:43 Yunlei He 2015-07-23 18:18 ` Jaegeuk Kim 0 siblings, 1 reply; 4+ messages in thread From: Yunlei He @ 2015-07-23 1:43 UTC (permalink / raw) To: linux-f2fs-devel, jaegeuk In the process of formatting, we zero out only one copy of NAT and SIT area, but we use both of them when the filesystem is sucessfully mounted. So I change the code to initialize both of two copies in mkfs. Signed-off-by: Yunlei He <heyunlei@huawei.com> --- mkfs/f2fs_format.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c index f879bca..b2b3549 100644 --- a/mkfs/f2fs_format.c +++ b/mkfs/f2fs_format.c @@ -389,7 +389,7 @@ static int f2fs_init_sit_area(void) sit_seg_addr *= blk_size; DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); - for (index = 0; index < (get_sb(segment_count_sit) / 2); index++) { + for (index = 0; index < get_sb(segment_count_sit); index++) { if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { MSG(1, "\tError: While zeroing out the sit area \ on disk!!!\n"); @@ -423,14 +423,14 @@ static int f2fs_init_nat_area(void) nat_seg_addr *= blk_size; DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); - for (index = 0; index < get_sb(segment_count_nat) / 2; index++) { + for (index = 0; index < get_sb(segment_count_nat); index++) { if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { MSG(1, "\tError: While zeroing out the nat area \ on disk!!!\n"); free(nat_buf); return -1; } - nat_seg_addr = nat_seg_addr + (2 * seg_size); + nat_seg_addr = nat_seg_addr + seg_size; } free(nat_buf); -- 1.9.1 ------------------------------------------------------------------------------ ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] f2fs: initialize both two copies of NAT and SIT area 2015-07-23 1:43 [PATCH] f2fs: initialize both two copies of NAT and SIT area Yunlei He @ 2015-07-23 18:18 ` Jaegeuk Kim 2015-07-24 9:55 ` He YunLei 0 siblings, 1 reply; 4+ messages in thread From: Jaegeuk Kim @ 2015-07-23 18:18 UTC (permalink / raw) To: Yunlei He; +Cc: linux-f2fs-devel Hi Yunlei, On Thu, Jul 23, 2015 at 09:43:04AM +0800, Yunlei He wrote: > In the process of formatting, we zero out only one copy of NAT and > SIT area, but we use both of them when the filesystem is sucessfully > mounted. So I change the code to initialize both of two copies in mkfs. After mounted, the other set will be filled with all valid entries by f2fs. Is there a bug? Thanks, > > Signed-off-by: Yunlei He <heyunlei@huawei.com> > --- > mkfs/f2fs_format.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c > index f879bca..b2b3549 100644 > --- a/mkfs/f2fs_format.c > +++ b/mkfs/f2fs_format.c > @@ -389,7 +389,7 @@ static int f2fs_init_sit_area(void) > sit_seg_addr *= blk_size; > > DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); > - for (index = 0; index < (get_sb(segment_count_sit) / 2); index++) { > + for (index = 0; index < get_sb(segment_count_sit); index++) { > if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { > MSG(1, "\tError: While zeroing out the sit area \ > on disk!!!\n"); > @@ -423,14 +423,14 @@ static int f2fs_init_nat_area(void) > nat_seg_addr *= blk_size; > > DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); > - for (index = 0; index < get_sb(segment_count_nat) / 2; index++) { > + for (index = 0; index < get_sb(segment_count_nat); index++) { > if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { > MSG(1, "\tError: While zeroing out the nat area \ > on disk!!!\n"); > free(nat_buf); > return -1; > } > - nat_seg_addr = nat_seg_addr + (2 * seg_size); > + nat_seg_addr = nat_seg_addr + seg_size; > } > > free(nat_buf); > -- > 1.9.1 ------------------------------------------------------------------------------ ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] f2fs: initialize both two copies of NAT and SIT area 2015-07-23 18:18 ` Jaegeuk Kim @ 2015-07-24 9:55 ` He YunLei 2015-07-24 16:00 ` Jaegeuk Kim 0 siblings, 1 reply; 4+ messages in thread From: He YunLei @ 2015-07-24 9:55 UTC (permalink / raw) To: Jaegeuk Kim; +Cc: linux-f2fs-devel Hi Jaegeuk On 2015/7/24 2:18, Jaegeuk Kim wrote: > Hi Yunlei, > > On Thu, Jul 23, 2015 at 09:43:04AM +0800, Yunlei He wrote: >> In the process of formatting, we zero out only one copy of NAT and >> SIT area, but we use both of them when the filesystem is sucessfully >> mounted. So I change the code to initialize both of two copies in mkfs. > > After mounted, the other set will be filled with all valid entries by f2fs. > Is there a bug? > > Thanks, > I think f2fs write nat and sit in two place alternately. In function flush_sit_entries, f2fs chooses journal in curseg f2fs_summary_block firstly, if no enough space, then it flush entries to sit pages, which wait for write back. Pages are got by get_next_sit_page function: 1714 src_off = current_sit_addr(sbi, start); 1715 dst_off = next_sit_addr(sbi, src_off); 1716 1717 /* get current sit block page without lock */ 1718 src_page = get_meta_page(sbi, src_off); 1719 dst_page = grab_meta_page(sbi, dst_off); 1722 src_addr = page_address(src_page); 1723 dst_addr = page_address(dst_page); 1724 memcpy(dst_addr, src_addr, PAGE_CACHE_SIZE); I also make a test on my pc SIT info on my f2fs partition is as below, SIT(1): 1280 ~ 2816 (4k unit, total 6 MB 3 segments) SIT(2): 2817 ~ 4352 (4k unit, total 6 MB 3 segments) I touch 2000 empty files to make sure dirty sit entries are flushed to sit pages [ 5870.324921] flush to sit ~~~hyl fs/f2fs/segment.c:1875 [ 5870.324921] src_off = 4198~~~hyl fs/f2fs/segment.c:1715 [ 5870.324921] dst_off = 2662~~~hyl fs/f2fs/segment.c:1717 then I delete all the file and touch again [ 5613.634439] flush to sit ~~~hyl fs/f2fs/segment.c:1875 [ 5613.634439] src_off = 2662~~~hyl fs/f2fs/segment.c:1715 [ 5613.634439] dst_off = 4198~~~hyl fs/f2fs/segment.c:1717 We can see f2fs use both copies of NAT and SIT, so why we zero out just one copy ? >> >> Signed-off-by: Yunlei He <heyunlei@huawei.com> >> --- >> mkfs/f2fs_format.c | 6 +++--- >> 1 file changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c >> index f879bca..b2b3549 100644 >> --- a/mkfs/f2fs_format.c >> +++ b/mkfs/f2fs_format.c >> @@ -389,7 +389,7 @@ static int f2fs_init_sit_area(void) >> sit_seg_addr *= blk_size; >> >> DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); >> - for (index = 0; index < (get_sb(segment_count_sit) / 2); index++) { >> + for (index = 0; index < get_sb(segment_count_sit); index++) { >> if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { >> MSG(1, "\tError: While zeroing out the sit area \ >> on disk!!!\n"); >> @@ -423,14 +423,14 @@ static int f2fs_init_nat_area(void) >> nat_seg_addr *= blk_size; >> >> DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); >> - for (index = 0; index < get_sb(segment_count_nat) / 2; index++) { >> + for (index = 0; index < get_sb(segment_count_nat); index++) { >> if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { >> MSG(1, "\tError: While zeroing out the nat area \ >> on disk!!!\n"); >> free(nat_buf); >> return -1; >> } >> - nat_seg_addr = nat_seg_addr + (2 * seg_size); >> + nat_seg_addr = nat_seg_addr + seg_size; >> } >> >> free(nat_buf); >> -- >> 1.9.1 > > . > ------------------------------------------------------------------------------ ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] f2fs: initialize both two copies of NAT and SIT area 2015-07-24 9:55 ` He YunLei @ 2015-07-24 16:00 ` Jaegeuk Kim 0 siblings, 0 replies; 4+ messages in thread From: Jaegeuk Kim @ 2015-07-24 16:00 UTC (permalink / raw) To: He YunLei; +Cc: linux-f2fs-devel Hi Yunlei, On Fri, Jul 24, 2015 at 05:55:58PM +0800, He YunLei wrote: > Hi Jaegeuk > On 2015/7/24 2:18, Jaegeuk Kim wrote: > >Hi Yunlei, > > > >On Thu, Jul 23, 2015 at 09:43:04AM +0800, Yunlei He wrote: > >>In the process of formatting, we zero out only one copy of NAT and > >>SIT area, but we use both of them when the filesystem is sucessfully > >>mounted. So I change the code to initialize both of two copies in mkfs. > > > >After mounted, the other set will be filled with all valid entries by f2fs. > >Is there a bug? > > > >Thanks, > > > > I think f2fs write nat and sit in two place alternately. Yup. > > In function flush_sit_entries, f2fs chooses journal in curseg f2fs_summary_block firstly, > if no enough space, then it flush entries to sit pages, which wait for write back. > Pages are got by get_next_sit_page function: > > 1714 src_off = current_sit_addr(sbi, start); > 1715 dst_off = next_sit_addr(sbi, src_off); > 1716 > 1717 /* get current sit block page without lock */ > 1718 src_page = get_meta_page(sbi, src_off); The src_page is filled with zeros written by mkfs.f2fs. > 1719 dst_page = grab_meta_page(sbi, dst_off); > > 1722 src_addr = page_address(src_page); > 1723 dst_addr = page_address(dst_page); > 1724 memcpy(dst_addr, src_addr, PAGE_CACHE_SIZE); So, the next set, dst_page, is copied from src_page and then new entries will be updated into the dst_page. Therefore, we don't need to zero out the dst_page by mkfs.f2fs. Thanks, > > I also make a test on my pc > > SIT info on my f2fs partition is as below, > SIT(1): 1280 ~ 2816 (4k unit, total 6 MB 3 segments) > SIT(2): 2817 ~ 4352 (4k unit, total 6 MB 3 segments) > > I touch 2000 empty files to make sure dirty sit entries are flushed to sit pages > > [ 5870.324921] flush to sit ~~~hyl fs/f2fs/segment.c:1875 > [ 5870.324921] src_off = 4198~~~hyl fs/f2fs/segment.c:1715 > [ 5870.324921] dst_off = 2662~~~hyl fs/f2fs/segment.c:1717 > > then I delete all the file and touch again > > [ 5613.634439] flush to sit ~~~hyl fs/f2fs/segment.c:1875 > [ 5613.634439] src_off = 2662~~~hyl fs/f2fs/segment.c:1715 > [ 5613.634439] dst_off = 4198~~~hyl fs/f2fs/segment.c:1717 > > We can see f2fs use both copies of NAT and SIT, so why we zero out just one copy ? > > > >> > >>Signed-off-by: Yunlei He <heyunlei@huawei.com> > >>--- > >> mkfs/f2fs_format.c | 6 +++--- > >> 1 file changed, 3 insertions(+), 3 deletions(-) > >> > >>diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c > >>index f879bca..b2b3549 100644 > >>--- a/mkfs/f2fs_format.c > >>+++ b/mkfs/f2fs_format.c > >>@@ -389,7 +389,7 @@ static int f2fs_init_sit_area(void) > >> sit_seg_addr *= blk_size; > >> > >> DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); > >>- for (index = 0; index < (get_sb(segment_count_sit) / 2); index++) { > >>+ for (index = 0; index < get_sb(segment_count_sit); index++) { > >> if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { > >> MSG(1, "\tError: While zeroing out the sit area \ > >> on disk!!!\n"); > >>@@ -423,14 +423,14 @@ static int f2fs_init_nat_area(void) > >> nat_seg_addr *= blk_size; > >> > >> DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); > >>- for (index = 0; index < get_sb(segment_count_nat) / 2; index++) { > >>+ for (index = 0; index < get_sb(segment_count_nat); index++) { > >> if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { > >> MSG(1, "\tError: While zeroing out the nat area \ > >> on disk!!!\n"); > >> free(nat_buf); > >> return -1; > >> } > >>- nat_seg_addr = nat_seg_addr + (2 * seg_size); > >>+ nat_seg_addr = nat_seg_addr + seg_size; > >> } > >> > >> free(nat_buf); > >>-- > >>1.9.1 > > > >. > > ------------------------------------------------------------------------------ ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-07-24 16:08 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-07-23 1:43 [PATCH] f2fs: initialize both two copies of NAT and SIT area Yunlei He 2015-07-23 18:18 ` Jaegeuk Kim 2015-07-24 9:55 ` He YunLei 2015-07-24 16:00 ` Jaegeuk Kim
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.