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 <[email protected]> >>>>> --- >>>>> 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 _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
