Re: [PATCH net-next v3 11/13] net: replace page_frag with page_frag_cache

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2024/5/11 1:29, Mat Martineau wrote:
> On Fri, 10 May 2024, Yunsheng Lin wrote:
> 
>> On 2024/5/10 0:22, Mat Martineau wrote:
>>> On Wed, 8 May 2024, Yunsheng Lin wrote:
>>>
>>>> Use the newly introduced prepare/probe/commit API to
>>>> replace page_frag with page_frag_cache for sk_page_frag().
>>>>
>>>> CC: Alexander Duyck <alexander.duyck@xxxxxxxxx>
>>>> Signed-off-by: Yunsheng Lin <linyunsheng@xxxxxxxxxx>
>>>> ---
>>>> .../chelsio/inline_crypto/chtls/chtls.h       |   3 -
>>>> .../chelsio/inline_crypto/chtls/chtls_io.c    | 100 ++++---------
>>>> .../chelsio/inline_crypto/chtls/chtls_main.c  |   3 -
>>>> drivers/net/tun.c                             |  28 ++--
>>>> include/linux/sched.h                         |   4 +-
>>>> include/net/sock.h                            |  14 +-
>>>> kernel/exit.c                                 |   3 +-
>>>> kernel/fork.c                                 |   3 +-
>>>> net/core/skbuff.c                             |  32 ++--
>>>> net/core/skmsg.c                              |  22 +--
>>>> net/core/sock.c                               |  46 ++++--
>>>> net/ipv4/ip_output.c                          |  33 +++--
>>>> net/ipv4/tcp.c                                |  35 ++---
>>>> net/ipv4/tcp_output.c                         |  28 ++--
>>>> net/ipv6/ip6_output.c                         |  33 +++--
>>>> net/kcm/kcmsock.c                             |  30 ++--
>>>> net/mptcp/protocol.c                          |  70 +++++----
>>>> net/sched/em_meta.c                           |   2 +-
>>>> net/tls/tls_device.c                          | 139 ++++++++++--------
>>>> 19 files changed, 331 insertions(+), 297 deletions(-)
>>>>
>>>
>>> <snip>
>>>
>>>> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
>>>> index bb8f96f2b86f..ab844011d442 100644
>>>> --- a/net/mptcp/protocol.c
>>>> +++ b/net/mptcp/protocol.c
>>>> @@ -960,17 +960,18 @@ static bool mptcp_skb_can_collapse_to(u64 write_seq,
>>>> }
>>>>
>>>> /* we can append data to the given data frag if:
>>>> - * - there is space available in the backing page_frag
>>>> - * - the data frag tail matches the current page_frag free offset
>>>> + * - there is space available for the current page
>>>> + * - the data frag tail matches the current page and offset
>>>>  * - the data frag end sequence number matches the current write seq
>>>>  */
>>>> static bool mptcp_frag_can_collapse_to(const struct mptcp_sock *msk,
>>>> -                       const struct page_frag *pfrag,
>>>> +                       const struct page *page,
>>>> +                       const unsigned int offset,
>>>> +                       const unsigned int size,
>>>
>>> Hi Yunsheng -
>>>
>>> Why add the 'size' parameter here? It's checked to be a nonzero value, but it can only be 0 if page is also NULL. In this case "page == df->page" will be false, so the function will return false even without checking 'size'.
>>
>> Is it possible that the pfrag->page is also NULL, which may cause
>> mptcp_frag_can_collapse_to() to return true?
> 
> Not sure. But I do know that df->page will never be NULL, so "page == df->page" will always be false when page == NULL.
> 
>>
>> I just found out that the 'size' is not set to zero when return
>> NULL for the implementation of probe API for the current version.
>> Perhaps it makes more sense to expect the API caller to make sure
>> the the returned 'page' not being NULL before using the 'offset',
>> 'size' and 'va', like below:
>>
>> df && page && page == df->page
>>
> 
> Given that df->page is never NULL, I don't think the extra "&& page" is needed.

Not checking the extra "&& page" seems to cause the below warning, it seems we
have the below options:
1. ignore the warning.
2. set offset to zero if there is no enough space when probe API asks for a specific
   amount of available space as you suggested.
3. add the "&& page" in mptcp_frag_can_collapse_to()

what is your favour option? or any other better option?

net-mptcp-protocol.c:warning:variable-offset-is-used-uninitialized-whenever-if-condition-is-false

> 
> - Mat
> .
> 




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux