* [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments @ 2016-12-20 3:11 Yunlei He 2016-12-20 3:11 ` [PATCH 2/2 v2] f2fs: add a case of no need to read a page in write begin Yunlei He 2016-12-21 2:02 ` [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments Chao Yu 0 siblings, 2 replies; 10+ messages in thread From: Yunlei He @ 2016-12-20 3:11 UTC (permalink / raw) To: linux-f2fs-devel, jaegeuk, yuchao0; +Cc: heyunlei If userspace issue a fstrim with a range not involve prefree segments, it will reuse these segments without discard. This patch fix it. Signed-off-by: Yunlei He <heyunlei@huawei.com> --- fs/f2fs/segment.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 0738f48..a40a34b 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -916,7 +916,11 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc) dirty_i->nr_dirty[PRE] -= end - start; - if (force || !test_opt(sbi, DISCARD)) + if (!test_opt(sbi, DISCARD)) + continue; + + if (force && start * sbi->blocks_per_seg >= cpc->trim_start && + end * sbi->blocks_per_seg <= cpc->trim_end) continue; if (!test_opt(sbi, LFS) || sbi->segs_per_sec == 1) { -- 2.10.1 ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/2 v2] f2fs: add a case of no need to read a page in write begin 2016-12-20 3:11 [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments Yunlei He @ 2016-12-20 3:11 ` Yunlei He 2016-12-20 18:03 ` Jaegeuk Kim 2016-12-21 2:02 ` [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments Chao Yu 1 sibling, 1 reply; 10+ messages in thread From: Yunlei He @ 2016-12-20 3:11 UTC (permalink / raw) To: linux-f2fs-devel, jaegeuk, yuchao0; +Cc: heyunlei If the range we write cover the whole valid data in the last page, we do not need to read it. Signed-off-by: Yunlei He <heyunlei@huawei.com> --- fs/f2fs/data.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 9ac2625..303873f 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -1715,6 +1715,9 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping, if (len == PAGE_SIZE || PageUptodate(page)) return 0; + if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode)) + return 0; + if (blkaddr == NEW_ADDR) { zero_user_segment(page, 0, PAGE_SIZE); SetPageUptodate(page); @@ -1768,7 +1771,7 @@ static int f2fs_write_end(struct file *file, * let generic_perform_write() try to copy data again through copied=0. */ if (!PageUptodate(page)) { - if (unlikely(copied != PAGE_SIZE)) + if (unlikely(copied != len)) copied = 0; else SetPageUptodate(page); -- 2.10.1 ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2 v2] f2fs: add a case of no need to read a page in write begin 2016-12-20 3:11 ` [PATCH 2/2 v2] f2fs: add a case of no need to read a page in write begin Yunlei He @ 2016-12-20 18:03 ` Jaegeuk Kim 2016-12-21 1:28 ` Chao Yu 0 siblings, 1 reply; 10+ messages in thread From: Jaegeuk Kim @ 2016-12-20 18:03 UTC (permalink / raw) To: Yunlei He; +Cc: heyunlei, linux-f2fs-devel On 12/20, Yunlei He wrote: > If the range we write cover the whole valid data in the last page, > we do not need to read it. > > Signed-off-by: Yunlei He <heyunlei@huawei.com> > --- > fs/f2fs/data.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > index 9ac2625..303873f 100644 > --- a/fs/f2fs/data.c > +++ b/fs/f2fs/data.c > @@ -1715,6 +1715,9 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping, > if (len == PAGE_SIZE || PageUptodate(page)) > return 0; > > + if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode)) I added here: zero_user_segment(page, 0, PAGE_SIZE); Otherwise, xfstests/f2fs/001 gives a failure. Thanks, > + return 0; > + > if (blkaddr == NEW_ADDR) { > zero_user_segment(page, 0, PAGE_SIZE); > SetPageUptodate(page); > @@ -1768,7 +1771,7 @@ static int f2fs_write_end(struct file *file, > * let generic_perform_write() try to copy data again through copied=0. > */ > if (!PageUptodate(page)) { > - if (unlikely(copied != PAGE_SIZE)) > + if (unlikely(copied != len)) > copied = 0; > else > SetPageUptodate(page); > -- > 2.10.1 > > > ------------------------------------------------------------------------------ > Developer Access Program for Intel Xeon Phi Processors > Access to Intel Xeon Phi processor-based developer platforms. > With one year of Intel Parallel Studio XE. > Training and support from Colfax. > Order your platform today.http://sdm.link/intel > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2 v2] f2fs: add a case of no need to read a page in write begin 2016-12-20 18:03 ` Jaegeuk Kim @ 2016-12-21 1:28 ` Chao Yu 2016-12-21 17:58 ` Jaegeuk Kim 0 siblings, 1 reply; 10+ messages in thread From: Chao Yu @ 2016-12-21 1:28 UTC (permalink / raw) To: Jaegeuk Kim, Yunlei He; +Cc: heyunlei, linux-f2fs-devel On 2016/12/21 2:03, Jaegeuk Kim wrote: > On 12/20, Yunlei He wrote: >> If the range we write cover the whole valid data in the last page, >> we do not need to read it. >> >> Signed-off-by: Yunlei He <heyunlei@huawei.com> >> --- >> fs/f2fs/data.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c >> index 9ac2625..303873f 100644 >> --- a/fs/f2fs/data.c >> +++ b/fs/f2fs/data.c >> @@ -1715,6 +1715,9 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping, >> if (len == PAGE_SIZE || PageUptodate(page)) >> return 0; >> >> + if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode)) > > I added here: > zero_user_segment(page, 0, PAGE_SIZE); Only need to zeroout in range of [len, page_size] in the page. Thanks, > > Otherwise, xfstests/f2fs/001 gives a failure. > > Thanks, > >> + return 0; >> + >> if (blkaddr == NEW_ADDR) { >> zero_user_segment(page, 0, PAGE_SIZE); >> SetPageUptodate(page); >> @@ -1768,7 +1771,7 @@ static int f2fs_write_end(struct file *file, >> * let generic_perform_write() try to copy data again through copied=0. >> */ >> if (!PageUptodate(page)) { >> - if (unlikely(copied != PAGE_SIZE)) >> + if (unlikely(copied != len)) >> copied = 0; >> else >> SetPageUptodate(page); >> -- >> 2.10.1 >> >> >> ------------------------------------------------------------------------------ >> Developer Access Program for Intel Xeon Phi Processors >> Access to Intel Xeon Phi processor-based developer platforms. >> With one year of Intel Parallel Studio XE. >> Training and support from Colfax. >> Order your platform today.http://sdm.link/intel >> _______________________________________________ >> Linux-f2fs-devel mailing list >> Linux-f2fs-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel > > . > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2 v2] f2fs: add a case of no need to read a page in write begin 2016-12-21 1:28 ` Chao Yu @ 2016-12-21 17:58 ` Jaegeuk Kim 0 siblings, 0 replies; 10+ messages in thread From: Jaegeuk Kim @ 2016-12-21 17:58 UTC (permalink / raw) To: Chao Yu; +Cc: heyunlei, linux-f2fs-devel On 12/21, Chao Yu wrote: > On 2016/12/21 2:03, Jaegeuk Kim wrote: > > On 12/20, Yunlei He wrote: > >> If the range we write cover the whole valid data in the last page, > >> we do not need to read it. > >> > >> Signed-off-by: Yunlei He <heyunlei@huawei.com> > >> --- > >> fs/f2fs/data.c | 5 ++++- > >> 1 file changed, 4 insertions(+), 1 deletion(-) > >> > >> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > >> index 9ac2625..303873f 100644 > >> --- a/fs/f2fs/data.c > >> +++ b/fs/f2fs/data.c > >> @@ -1715,6 +1715,9 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping, > >> if (len == PAGE_SIZE || PageUptodate(page)) > >> return 0; > >> > >> + if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode)) > > > > I added here: > > zero_user_segment(page, 0, PAGE_SIZE); > > Only need to zeroout in range of [len, page_size] in the page. Yup, fixed. Thanks, > > Thanks, > > > > > Otherwise, xfstests/f2fs/001 gives a failure. > > > > Thanks, > > > >> + return 0; > >> + > >> if (blkaddr == NEW_ADDR) { > >> zero_user_segment(page, 0, PAGE_SIZE); > >> SetPageUptodate(page); > >> @@ -1768,7 +1771,7 @@ static int f2fs_write_end(struct file *file, > >> * let generic_perform_write() try to copy data again through copied=0. > >> */ > >> if (!PageUptodate(page)) { > >> - if (unlikely(copied != PAGE_SIZE)) > >> + if (unlikely(copied != len)) > >> copied = 0; > >> else > >> SetPageUptodate(page); > >> -- > >> 2.10.1 > >> > >> > >> ------------------------------------------------------------------------------ > >> Developer Access Program for Intel Xeon Phi Processors > >> Access to Intel Xeon Phi processor-based developer platforms. > >> With one year of Intel Parallel Studio XE. > >> Training and support from Colfax. > >> Order your platform today.http://sdm.link/intel > >> _______________________________________________ > >> Linux-f2fs-devel mailing list > >> Linux-f2fs-devel@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel > > > > . > > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments 2016-12-20 3:11 [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments Yunlei He 2016-12-20 3:11 ` [PATCH 2/2 v2] f2fs: add a case of no need to read a page in write begin Yunlei He @ 2016-12-21 2:02 ` Chao Yu 2016-12-21 2:27 ` Chao Yu 1 sibling, 1 reply; 10+ messages in thread From: Chao Yu @ 2016-12-21 2:02 UTC (permalink / raw) To: Yunlei He, linux-f2fs-devel, jaegeuk; +Cc: heyunlei Hi Jaegeuk, Yunlei, On 2016/12/20 11:11, Yunlei He wrote: > If userspace issue a fstrim with a range not involve prefree segments, > it will reuse these segments without discard. This patch fix it. >From v1 patch, I guess originally Yunlei wants to skip clearing prefree segments which is not be included in fstrim range, now v2 patch doesn't follow the original intention. So I guess below modification is enough: - if (force || !test_opt(sbi, DISCARD)) + if (!test_opt(sbi, DISCARD)) Only we should consider is whether we would send redundant discards though fstrim when small discard is on. Thoughts? > > Signed-off-by: Yunlei He <heyunlei@huawei.com> > --- > fs/f2fs/segment.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c > index 0738f48..a40a34b 100644 > --- a/fs/f2fs/segment.c > +++ b/fs/f2fs/segment.c > @@ -916,7 +916,11 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc) > > dirty_i->nr_dirty[PRE] -= end - start; > > - if (force || !test_opt(sbi, DISCARD)) > + if (!test_opt(sbi, DISCARD)) > + continue; > + > + if (force && start * sbi->blocks_per_seg >= cpc->trim_start && > + end * sbi->blocks_per_seg <= cpc->trim_end) > continue; > > if (!test_opt(sbi, LFS) || sbi->segs_per_sec == 1) { > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments 2016-12-21 2:02 ` [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments Chao Yu @ 2016-12-21 2:27 ` Chao Yu 2016-12-21 3:35 ` heyunlei 0 siblings, 1 reply; 10+ messages in thread From: Chao Yu @ 2016-12-21 2:27 UTC (permalink / raw) To: Yunlei He, linux-f2fs-devel, jaegeuk; +Cc: heyunlei On 2016/12/21 10:02, Chao Yu wrote: > Hi Jaegeuk, Yunlei, > > On 2016/12/20 11:11, Yunlei He wrote: >> If userspace issue a fstrim with a range not involve prefree segments, >> it will reuse these segments without discard. This patch fix it. > >>From v1 patch, I guess originally Yunlei wants to skip clearing prefree segments > which is not be included in fstrim range, now v2 patch doesn't follow the > original intention. > > So I guess below modification is enough: > > - if (force || !test_opt(sbi, DISCARD)) > + if (!test_opt(sbi, DISCARD)) > > Only we should consider is whether we would send redundant discards though > fstrim when small discard is on. Oh, below condition has handling redundant case, sorry for my wrong understanding. if (force && start * sbi->blocks_per_seg >= cpc->trim_start && end * sbi->blocks_per_seg <= cpc->trim_end) continue; But should fix end boundary judegment as below: (end - 1) * sbi->blocks_per_seg <= cpc->trim_end Thanks, > > Thoughts? > >> >> Signed-off-by: Yunlei He <heyunlei@huawei.com> >> --- >> fs/f2fs/segment.c | 6 +++++- >> 1 file changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c >> index 0738f48..a40a34b 100644 >> --- a/fs/f2fs/segment.c >> +++ b/fs/f2fs/segment.c >> @@ -916,7 +916,11 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc) >> >> dirty_i->nr_dirty[PRE] -= end - start; >> >> - if (force || !test_opt(sbi, DISCARD)) >> + if (!test_opt(sbi, DISCARD)) >> + continue; >> + >> + if (force && start * sbi->blocks_per_seg >= cpc->trim_start && >> + end * sbi->blocks_per_seg <= cpc->trim_end) >> continue; >> >> if (!test_opt(sbi, LFS) || sbi->segs_per_sec == 1) { >> ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments 2016-12-21 2:27 ` Chao Yu @ 2016-12-21 3:35 ` heyunlei 2016-12-21 3:55 ` Chao Yu 0 siblings, 1 reply; 10+ messages in thread From: heyunlei @ 2016-12-21 3:35 UTC (permalink / raw) To: Chao Yu, linux-f2fs-devel, jaegeuk; +Cc: heyunlei Hi Chao, On 2016/12/21 10:27, Chao Yu wrote: > On 2016/12/21 10:02, Chao Yu wrote: >> Hi Jaegeuk, Yunlei, >> >> On 2016/12/20 11:11, Yunlei He wrote: >>> If userspace issue a fstrim with a range not involve prefree segments, >>> it will reuse these segments without discard. This patch fix it. >> >> >From v1 patch, I guess originally Yunlei wants to skip clearing prefree segments >> which is not be included in fstrim range, now v2 patch doesn't follow the >> original intention. >> >> So I guess below modification is enough: >> >> - if (force || !test_opt(sbi, DISCARD)) >> + if (!test_opt(sbi, DISCARD)) >> >> Only we should consider is whether we would send redundant discards though >> fstrim when small discard is on. > > Oh, below condition has handling redundant case, sorry for my wrong understanding. > > if (force && start * sbi->blocks_per_seg >= cpc->trim_start && > end * sbi->blocks_per_seg <= cpc->trim_end) > continue; > > But should fix end boundary judegment as below: > (end - 1) * sbi->blocks_per_seg <= cpc->trim_end For example: if start=0, end=2, it means that the first and second segment is prefree, but the third segment is not. start block address of first segment = 0 * 512 = start * 512 end block address of secnod segment = (3-1) * 512 = end * 512 So, boundary judgement has no problem? Thanks. > > Thanks, > >> >> Thoughts? >> >>> >>> Signed-off-by: Yunlei He <heyunlei@huawei.com> >>> --- >>> fs/f2fs/segment.c | 6 +++++- >>> 1 file changed, 5 insertions(+), 1 deletion(-) >>> >>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c >>> index 0738f48..a40a34b 100644 >>> --- a/fs/f2fs/segment.c >>> +++ b/fs/f2fs/segment.c >>> @@ -916,7 +916,11 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc) >>> >>> dirty_i->nr_dirty[PRE] -= end - start; >>> >>> - if (force || !test_opt(sbi, DISCARD)) >>> + if (!test_opt(sbi, DISCARD)) >>> + continue; >>> + >>> + if (force && start * sbi->blocks_per_seg >= cpc->trim_start && >>> + end * sbi->blocks_per_seg <= cpc->trim_end) >>> continue; >>> >>> if (!test_opt(sbi, LFS) || sbi->segs_per_sec == 1) { >>> > > > . > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments 2016-12-21 3:35 ` heyunlei @ 2016-12-21 3:55 ` Chao Yu 2016-12-21 9:00 ` heyunlei 0 siblings, 1 reply; 10+ messages in thread From: Chao Yu @ 2016-12-21 3:55 UTC (permalink / raw) To: heyunlei, linux-f2fs-devel, jaegeuk; +Cc: heyunlei On 2016/12/21 11:35, heyunlei wrote: > Hi Chao, > > On 2016/12/21 10:27, Chao Yu wrote: >> On 2016/12/21 10:02, Chao Yu wrote: >>> Hi Jaegeuk, Yunlei, >>> >>> On 2016/12/20 11:11, Yunlei He wrote: >>>> If userspace issue a fstrim with a range not involve prefree segments, >>>> it will reuse these segments without discard. This patch fix it. >>> >>> >From v1 patch, I guess originally Yunlei wants to skip clearing prefree segments >>> which is not be included in fstrim range, now v2 patch doesn't follow the >>> original intention. >>> >>> So I guess below modification is enough: >>> >>> - if (force || !test_opt(sbi, DISCARD)) >>> + if (!test_opt(sbi, DISCARD)) >>> >>> Only we should consider is whether we would send redundant discards though >>> fstrim when small discard is on. >> >> Oh, below condition has handling redundant case, sorry for my wrong understanding. >> >> if (force && start * sbi->blocks_per_seg >= cpc->trim_start && >> end * sbi->blocks_per_seg <= cpc->trim_end) >> continue; >> >> But should fix end boundary judegment as below: >> (end - 1) * sbi->blocks_per_seg <= cpc->trim_end > > For example: if start=0, end=2, it means that the first and second segment is prefree, > but the third segment is not. > > start block address of first segment = 0 * 512 = start * 512 > end block address of secnod segment = (3-1) * 512 = end * 512 IIRC, if we want to trim [0, 1] segment during fstrim, and #0, #1 segment is prefree, so in fstrim: start = 0 end = 2 trim_start = 0 trim_end = 1 So we should use (end - 1) to match trim_end, is that right? Thanks, > > So, boundary judgement has no problem? > > Thanks. > >> >> Thanks, >> >>> >>> Thoughts? >>> >>>> >>>> Signed-off-by: Yunlei He <heyunlei@huawei.com> >>>> --- >>>> fs/f2fs/segment.c | 6 +++++- >>>> 1 file changed, 5 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c >>>> index 0738f48..a40a34b 100644 >>>> --- a/fs/f2fs/segment.c >>>> +++ b/fs/f2fs/segment.c >>>> @@ -916,7 +916,11 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc) >>>> >>>> dirty_i->nr_dirty[PRE] -= end - start; >>>> >>>> - if (force || !test_opt(sbi, DISCARD)) >>>> + if (!test_opt(sbi, DISCARD)) >>>> + continue; >>>> + >>>> + if (force && start * sbi->blocks_per_seg >= cpc->trim_start && >>>> + end * sbi->blocks_per_seg <= cpc->trim_end) >>>> continue; >>>> >>>> if (!test_opt(sbi, LFS) || sbi->segs_per_sec == 1) { >>>> >> >> >> . >> > > > . > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments 2016-12-21 3:55 ` Chao Yu @ 2016-12-21 9:00 ` heyunlei 0 siblings, 0 replies; 10+ messages in thread From: heyunlei @ 2016-12-21 9:00 UTC (permalink / raw) To: Chao Yu, linux-f2fs-devel, jaegeuk; +Cc: heyunlei Hi Chao, On 2016/12/21 11:55, Chao Yu wrote: > On 2016/12/21 11:35, heyunlei wrote: >> Hi Chao, >> >> On 2016/12/21 10:27, Chao Yu wrote: >>> On 2016/12/21 10:02, Chao Yu wrote: >>>> Hi Jaegeuk, Yunlei, >>>> >>>> On 2016/12/20 11:11, Yunlei He wrote: >>>>> If userspace issue a fstrim with a range not involve prefree segments, >>>>> it will reuse these segments without discard. This patch fix it. >>>> >>>> >From v1 patch, I guess originally Yunlei wants to skip clearing prefree segments >>>> which is not be included in fstrim range, now v2 patch doesn't follow the >>>> original intention. >>>> >>>> So I guess below modification is enough: >>>> >>>> - if (force || !test_opt(sbi, DISCARD)) >>>> + if (!test_opt(sbi, DISCARD)) >>>> >>>> Only we should consider is whether we would send redundant discards though >>>> fstrim when small discard is on. >>> >>> Oh, below condition has handling redundant case, sorry for my wrong understanding. >>> >>> if (force && start * sbi->blocks_per_seg >= cpc->trim_start && >>> end * sbi->blocks_per_seg <= cpc->trim_end) >>> continue; >>> >>> But should fix end boundary judegment as below: >>> (end - 1) * sbi->blocks_per_seg <= cpc->trim_end >> >> For example: if start=0, end=2, it means that the first and second segment is prefree, >> but the third segment is not. >> >> start block address of first segment = 0 * 512 = start * 512 >> end block address of secnod segment = (3-1) * 512 = end * 512 > > IIRC, if we want to trim [0, 1] segment during fstrim, and #0, #1 segment is > prefree, so in fstrim: > start = 0 > end = 2 > trim_start = 0 > trim_end = 1 > > So we should use (end - 1) to match trim_end, is that right? Yeah, you are right! I'll send a new version. Thanks, > > Thanks, > >> >> So, boundary judgement has no problem? >> >> Thanks. >> >>> >>> Thanks, >>> >>>> >>>> Thoughts? >>>> >>>>> >>>>> Signed-off-by: Yunlei He <heyunlei@huawei.com> >>>>> --- >>>>> fs/f2fs/segment.c | 6 +++++- >>>>> 1 file changed, 5 insertions(+), 1 deletion(-) >>>>> >>>>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c >>>>> index 0738f48..a40a34b 100644 >>>>> --- a/fs/f2fs/segment.c >>>>> +++ b/fs/f2fs/segment.c >>>>> @@ -916,7 +916,11 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc) >>>>> >>>>> dirty_i->nr_dirty[PRE] -= end - start; >>>>> >>>>> - if (force || !test_opt(sbi, DISCARD)) >>>>> + if (!test_opt(sbi, DISCARD)) >>>>> + continue; >>>>> + >>>>> + if (force && start * sbi->blocks_per_seg >= cpc->trim_start && >>>>> + end * sbi->blocks_per_seg <= cpc->trim_end) >>>>> continue; >>>>> >>>>> if (!test_opt(sbi, LFS) || sbi->segs_per_sec == 1) { >>>>> >>> >>> >>> . >>> >> >> >> . >> > > > . > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2016-12-21 17:58 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-12-20 3:11 [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments Yunlei He 2016-12-20 3:11 ` [PATCH 2/2 v2] f2fs: add a case of no need to read a page in write begin Yunlei He 2016-12-20 18:03 ` Jaegeuk Kim 2016-12-21 1:28 ` Chao Yu 2016-12-21 17:58 ` Jaegeuk Kim 2016-12-21 2:02 ` [PATCH 1/2 v2] f2fs: fix a missing discard prefree segments Chao Yu 2016-12-21 2:27 ` Chao Yu 2016-12-21 3:35 ` heyunlei 2016-12-21 3:55 ` Chao Yu 2016-12-21 9:00 ` heyunlei
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).