Re: [PATCH V3 5/6] f2fs: ignore discard return value

Chaitanya Kulkarni <[email protected]>
Newsgroups gmane.linux.block,gmane.linux.kernel,gmane.linux.raid,gmane.linux.file-systems.f2fs,gmane.linux.kernel.bpf
Message-ID <[email protected]>
On 11/25/25 18:47, Chao Yu wrote:
> On 11/25/25 07:48, Chaitanya Kulkarni wrote:
>> __blkdev_issue_discard() always returns 0, making the error assignment
>> in __submit_discard_cmd() dead code.
>>
>> Initialize err to 0 and remove the error assignment from the
>> __blkdev_issue_discard() call to err. Move fault injection code into
>> already present if branch where err is set to -EIO.
>>
>> This preserves the fault injection behavior while removing dead error
>> handling.
>>
>> Reviewed-by: Martin K. Petersen <[email protected]>
>> Reviewed-by: Johannes Thumshirn <[email protected]>
>> Reviewed-by: Christoph Hellwig <[email protected]>
>> Signed-off-by: Chaitanya Kulkarni <[email protected]>
>> ---
>>   fs/f2fs/segment.c | 10 +++-------
>>   1 file changed, 3 insertions(+), 7 deletions(-)
>>
>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
>> index b45eace879d7..22b736ec9c51 100644
>> --- a/fs/f2fs/segment.c
>> +++ b/fs/f2fs/segment.c
>> @@ -1343,15 +1343,9 @@ static int __submit_discard_cmd(struct f2fs_sb_info *sbi,
>>   
>>   		dc->di.len += len;
>>   
>> +		err = 0;
>>   		if (time_to_inject(sbi, FAULT_DISCARD)) {
>>   			err = -EIO;
>> -		} else {
>> -			err = __blkdev_issue_discard(bdev,
>> -					SECTOR_FROM_BLOCK(start),
>> -					SECTOR_FROM_BLOCK(len),
>> -					GFP_NOFS, &bio);
>> -		}
>> -		if (err) {
>>   			spin_lock_irqsave(&dc->lock, flags);
>>   			if (dc->state == D_PARTIAL)
>>   				dc->state = D_SUBMIT;
>> @@ -1360,6 +1354,8 @@ static int __submit_discard_cmd(struct f2fs_sb_info *sbi,
>>   			break;
>>   		}
>>   
>> +		__blkdev_issue_discard(bdev, SECTOR_FROM_BLOCK(start),
>> +				SECTOR_FROM_BLOCK(len), GFP_NOFS, &bio);
> Oh, wait, bio can be NULL? Then below f2fs_bug_on() will trigger panic or warning.
>
> Thanks,

That will happen without this patch also or not ?

Since __blkdev_issue_discard() is always returning 0 irrespective of bio
is null or not.

The following condition in original code will only execute when err is set to
-EIO and that will only happen when time_to_inject() -> true.
Original call to __blkdev_issue_discard() without this patch will always
return 0 even for bio == NULL after __blkdev_issue_discard().

This is what we are trying to fix so caller should not rely on
__blkdev_issue_discard() return value  :-

354                 if (err) {
1355                         spin_lock_irqsave(&dc->lock, flags);
1356                         if (dc->state == D_PARTIAL)
1357                                 dc->state = D_SUBMIT;
1358                         spin_unlock_irqrestore(&dc->lock, flags);
1359
1360                         break;
1361                 }

which will lead f2fs_bug_on() for bio == NULL even without this patch.

This patch is not changing exiting behavior, correct me if I'm wrong.


>
>>   		f2fs_bug_on(sbi, !bio);
>>   
>>   		/*

-ck
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.