diff mbox

[v2] f2fs: Do not issue small discards in LFS mode

Message ID 20170526080440.11160-1-damien.lemoal@wdc.com (mailing list archive)
State New, archived
Headers show

Commit Message

Damien Le Moal May 26, 2017, 8:04 a.m. UTC
clear_prefree_segments() issues small discards after discarding full
segments. These small discards may not be section aligned, so not zone
aligned on a zoned block device, causing __f2fs_iissue_discard_zone() to fail.
Fix this by not issuing small discards for a volume mounted with the BLKZONED
feature enabled.

Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
---
 fs/f2fs/segment.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Chao Yu May 26, 2017, 8:16 a.m. UTC | #1
On 2017/5/26 16:04, Damien Le Moal wrote:
> clear_prefree_segments() issues small discards after discarding full
> segments. These small discards may not be section aligned, so not zone
> aligned on a zoned block device, causing __f2fs_iissue_discard_zone() to fail.
> Fix this by not issuing small discards for a volume mounted with the BLKZONED
> feature enabled.
> 
> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>

This version looks good to me.

Reviewed-by: Chao Yu <yuchao0@huawei.com>

Thanks,

> ---
>  fs/f2fs/segment.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
> index 9684585..1279650 100644
> --- a/fs/f2fs/segment.c
> +++ b/fs/f2fs/segment.c
> @@ -1322,7 +1322,8 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc)
>  					sbi->blocks_per_seg, cur_pos);
>  			len = next_pos - cur_pos;
>  
> -			if (force && len < cpc->trim_minlen)
> +			if (f2fs_sb_mounted_blkzoned(sbi->sb) ||
> +			    (force && len < cpc->trim_minlen))
>  				goto skip;
>  
>  			f2fs_issue_discard(sbi, entry->start_blkaddr + cur_pos,
>
Damien Le Moal July 4, 2017, 8:11 a.m. UTC | #2
Jaegeuk,

On 5/26/17 17:16, Chao Yu wrote:
> On 2017/5/26 16:04, Damien Le Moal wrote:
>> clear_prefree_segments() issues small discards after discarding full
>> segments. These small discards may not be section aligned, so not zone
>> aligned on a zoned block device, causing __f2fs_iissue_discard_zone() to fail.
>> Fix this by not issuing small discards for a volume mounted with the BLKZONED
>> feature enabled.
>>
>> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
> 
> This version looks good to me.
> 
> Reviewed-by: Chao Yu <yuchao0@huawei.com>
> 
> Thanks,
> 
>> ---
>>  fs/f2fs/segment.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
>> index 9684585..1279650 100644
>> --- a/fs/f2fs/segment.c
>> +++ b/fs/f2fs/segment.c
>> @@ -1322,7 +1322,8 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc)
>>  					sbi->blocks_per_seg, cur_pos);
>>  			len = next_pos - cur_pos;
>>  
>> -			if (force && len < cpc->trim_minlen)
>> +			if (f2fs_sb_mounted_blkzoned(sbi->sb) ||
>> +			    (force && len < cpc->trim_minlen))
>>  				goto skip;
>>  
>>  			f2fs_issue_discard(sbi, entry->start_blkaddr + cur_pos,
>>

It looks like this patch was not included in 4.12, so we are still
getting a lot of "unaligned discard" on zoned block devices.
Is there a problem with this patch or was that an oversight ?

Please consider adding this patch.

Best regards.
Jaegeuk Kim July 4, 2017, 9:21 a.m. UTC | #3
Hi Damien,

On 07/04, Damien Le Moal wrote:
> Jaegeuk,
> 
> On 5/26/17 17:16, Chao Yu wrote:
> > On 2017/5/26 16:04, Damien Le Moal wrote:
> >> clear_prefree_segments() issues small discards after discarding full
> >> segments. These small discards may not be section aligned, so not zone
> >> aligned on a zoned block device, causing __f2fs_iissue_discard_zone() to fail.
> >> Fix this by not issuing small discards for a volume mounted with the BLKZONED
> >> feature enabled.
> >>
> >> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
> > 
> > This version looks good to me.
> > 
> > Reviewed-by: Chao Yu <yuchao0@huawei.com>
> > 
> > Thanks,
> > 
> >> ---
> >>  fs/f2fs/segment.c | 3 ++-
> >>  1 file changed, 2 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
> >> index 9684585..1279650 100644
> >> --- a/fs/f2fs/segment.c
> >> +++ b/fs/f2fs/segment.c
> >> @@ -1322,7 +1322,8 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc)
> >>  					sbi->blocks_per_seg, cur_pos);
> >>  			len = next_pos - cur_pos;
> >>  
> >> -			if (force && len < cpc->trim_minlen)
> >> +			if (f2fs_sb_mounted_blkzoned(sbi->sb) ||
> >> +			    (force && len < cpc->trim_minlen))
> >>  				goto skip;
> >>  
> >>  			f2fs_issue_discard(sbi, entry->start_blkaddr + cur_pos,
> >>
> 
> It looks like this patch was not included in 4.12, so we are still
> getting a lot of "unaligned discard" on zoned block devices.
> Is there a problem with this patch or was that an oversight ?

Ah, I filed the patch towards 4.13-rc1, and marked it to be merged into the
stable kernel for v4.12. I'm planning pull-request this week, so expect it'll be
merged after then.

Thanks,

> 
> Please consider adding this patch.
> 
> Best regards.
> 
> -- 
> Damien Le Moal,
> Western Digital
Damien Le Moal July 5, 2017, 1:01 a.m. UTC | #4
Jaegeuk,

On 7/4/17 18:21, Jaegeuk Kim wrote:
> Hi Damien,
> 
> On 07/04, Damien Le Moal wrote:
>> Jaegeuk,
>>
>> On 5/26/17 17:16, Chao Yu wrote:
>>> On 2017/5/26 16:04, Damien Le Moal wrote:
>>>> clear_prefree_segments() issues small discards after discarding full
>>>> segments. These small discards may not be section aligned, so not zone
>>>> aligned on a zoned block device, causing __f2fs_iissue_discard_zone() to fail.
>>>> Fix this by not issuing small discards for a volume mounted with the BLKZONED
>>>> feature enabled.
>>>>
>>>> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
>>>
>>> This version looks good to me.
>>>
>>> Reviewed-by: Chao Yu <yuchao0@huawei.com>
>>>
>>> Thanks,
>>>
>>>> ---
>>>>  fs/f2fs/segment.c | 3 ++-
>>>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
>>>> index 9684585..1279650 100644
>>>> --- a/fs/f2fs/segment.c
>>>> +++ b/fs/f2fs/segment.c
>>>> @@ -1322,7 +1322,8 @@ void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc)
>>>>  					sbi->blocks_per_seg, cur_pos);
>>>>  			len = next_pos - cur_pos;
>>>>  
>>>> -			if (force && len < cpc->trim_minlen)
>>>> +			if (f2fs_sb_mounted_blkzoned(sbi->sb) ||
>>>> +			    (force && len < cpc->trim_minlen))
>>>>  				goto skip;
>>>>  
>>>>  			f2fs_issue_discard(sbi, entry->start_blkaddr + cur_pos,
>>>>
>>
>> It looks like this patch was not included in 4.12, so we are still
>> getting a lot of "unaligned discard" on zoned block devices.
>> Is there a problem with this patch or was that an oversight ?
> 
> Ah, I filed the patch towards 4.13-rc1, and marked it to be merged into the
> stable kernel for v4.12. I'm planning pull-request this week, so expect it'll be
> merged after then.

Since it is a bug fix, I thought it would go into 4.12-rc. But with the
cc to stable, we are fine. Thanks !
diff mbox

Patch

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 9684585..1279650 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -1322,7 +1322,8 @@  void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 					sbi->blocks_per_seg, cur_pos);
 			len = next_pos - cur_pos;
 
-			if (force && len < cpc->trim_minlen)
+			if (f2fs_sb_mounted_blkzoned(sbi->sb) ||
+			    (force && len < cpc->trim_minlen))
 				goto skip;
 
 			f2fs_issue_discard(sbi, entry->start_blkaddr + cur_pos,