Skip to content

Conversation

@Avenger-285714
Copy link
Member

@Avenger-285714 Avenger-285714 commented Jul 21, 2025

Link: https://bugzilla.openanolis.cn//show_bug.cgi?id=11971

This patchset introduces 4-tuple hash for connected udp sockets, to make
connected udp lookup faster.

Stress test results (with 1 cpu fully used) are shown below, in pps:
(1) un-connected socket as server
[a] w/o hash4: 1,825176
[b] w/ hash4: 1,831750 (+0.36%)

(2) 500 connected sockets as server
[c] w/o hash4: 290860 (only 16% of [a])
[d] w/ hash4: 1,889658 (+3.1% compared with [b])
With hash4, compute_score is skipped when lookup, so [d] is slightly
better than [b].

Patch1: Add a new counter for hslot2 named hash4_cnt, to avoid cache line
miss when lookup.
Patch2: Add hslot/hlist_nulls for 4-tuple hash.
Patch3 and 4: Implement 4-tuple hash for ipv4 and ipv6.

The detailed motivation is described in Patch 3.

The 4-tuple hash increases the size of udp_sock and udp_hslot. Thus add it
with CONFIG_BASE_SMALL, i.e., it's a no op with CONFIG_BASE_SMALL.

Intentionally, the feature is not available for udplite. Though udplite
shares some structs and functions with udp, its connect() keeps unchanged.
So all udplite sockets perform the same as un-connected udp sockets.
Besides, udplite also shares the additional memory consumption in udp_sock
and udptable.

Link: https://gitee.com/anolis/cloud-kernel/pulls/4153

Summary by Sourcery

Introduce a 4-tuple hashing mechanism for connected UDP sockets to accelerate lookup operations, integrate it into IPv4 and IPv6 code paths with conditional no-op support for minimal builds, and expose related symbols for external modules.

New Features:

  • Add optional 4-tuple hash table (hash4) for connected UDPv4 and UDPv6 sockets

Enhancements:

  • Integrate hash4 into socket lookup, connect, disconnect, and rehash routines to bypass compute_score for connected sockets
  • Expose udp_ehashfn, udp_lib_hash4, udp4_hash4, and udp6_hash4 symbols for external use
  • Extend udp_table and udp_hslot structures to allocate and initialize hash4 slots with nulls lists

Chores:

  • Provide CONFIG_BASE_SMALL stubs for hash4 routines and adjust table allocation to compute slot size dynamically
  • Replace manual mask/slot calculations with udp_hashslot and udp_hashslot2 helpers

LPhgh added 4 commits July 22, 2025 00:10
commit accdd51 upstream.

Preparing for udp 4-tuple hash (uhash4 for short).

To implement uhash4 without cache line missing when lookup, hslot2 is
used to record the number of hashed sockets in hslot4. Thus adding a new
struct udp_hslot_main with field hash4_cnt, which is used by hash2. The
new struct is used to avoid doubling the size of udp_hslot.

Before uhash4 lookup, firstly checking hash4_cnt to see if there are
hashed sks in hslot4. Because hslot2 is always used in lookup, there is
no cache line miss.

Related helpers are updated, and use the helpers as possible.

uhash4 is implemented in following patches.

Signed-off-by: Philo Lu <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Acked-by: Paolo Abeni <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
[ Backport from v6.13 ]
Signed-off-by: Philo Lu <[email protected]>
Signed-off-by: WangYuli <[email protected]>
commit dab78a1 upstream.

Add a new hash list, hash4, in udp table. It will be used to implement
4-tuple hash for connected udp sockets. This patch adds the hlist to
table, and implements helpers and the initialization. 4-tuple hash is
implemented in the following patch.

hash4 uses hlist_nulls to avoid moving wrongly onto another hlist due to
concurrent rehash, because rehash() can happen with lookup().

Co-developed-by: Cambda Zhu <[email protected]>
Signed-off-by: Cambda Zhu <[email protected]>
Co-developed-by: Fred Chen <[email protected]>
Signed-off-by: Fred Chen <[email protected]>
Co-developed-by: Yubing Qiu <[email protected]>
Signed-off-by: Yubing Qiu <[email protected]>
Signed-off-by: Philo Lu <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Acked-by: Paolo Abeni <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
[ Backport from v6.13 ]
Signed-off-by: Philo Lu <[email protected]>
Signed-off-by: WangYuli <[email protected]>
commit 78c91ae upstream.

Currently, the udp_table has two hash table, the port hash and portaddr
hash. Usually for UDP servers, all sockets have the same local port and
addr, so they are all on the same hash slot within a reuseport group.

In some applications, UDP servers use connect() to manage clients. In
particular, when firstly receiving from an unseen 4 tuple, a new socket
is created and connect()ed to the remote addr:port, and then the fd is
used exclusively by the client.

Once there are connected sks in a reuseport group, udp has to score all
sks in the same hash2 slot to find the best match. This could be
inefficient with a large number of connections, resulting in high
softirq overhead.

To solve the problem, this patch implement 4-tuple hash for connected
udp sockets. During connect(), hash4 slot is updated, as well as a
corresponding counter, hash4_cnt, in hslot2. In __udp4_lib_lookup(),
hslot4 will be searched firstly if the counter is non-zero. Otherwise,
hslot2 is used like before. Note that only connected sockets enter this
hash4 path, while un-connected ones are not affected.

hlist_nulls is used for hash4, because we probably move to another hslot
wrongly when lookup with concurrent rehash. Then we check nulls at the
list end to see if we should restart lookup. Because udp does not use
SLAB_TYPESAFE_BY_RCU, we don't need to touch sk_refcnt when lookup.

Stress test results (with 1 cpu fully used) are shown below, in pps:
(1) _un-connected_ socket as server
    [a] w/o hash4: 1,825176
    [b] w/  hash4: 1,831750 (+0.36%)

(2) 500 _connected_ sockets as server
    [c] w/o hash4:   290860 (only 16% of [a])
    [d] w/  hash4: 1,889658 (+3.1% compared with [b])

With hash4, compute_score is skipped when lookup, so [d] is slightly
better than [b].

Co-developed-by: Cambda Zhu <[email protected]>
Signed-off-by: Cambda Zhu <[email protected]>
Co-developed-by: Fred Chen <[email protected]>
Signed-off-by: Fred Chen <[email protected]>
Co-developed-by: Yubing Qiu <[email protected]>
Signed-off-by: Yubing Qiu <[email protected]>
Signed-off-by: Philo Lu <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Acked-by: Paolo Abeni <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
[ Backport from v6.13 ]
Signed-off-by: Philo Lu <[email protected]>
Signed-off-by: WangYuli <[email protected]>
commit 1b29a73 upstream.

Implement ipv6 udp hash4 like that in ipv4. The major difference is that
the hash value should be calculated with udp6_ehashfn(). Besides,
ipv4-mapped ipv6 address is handled before hash() and rehash(). Export
udp_ehashfn because now we use it in udpv6 rehash.

Core procedures of hash/unhash/rehash are same as ipv4, and udpv4 and
udpv6 share the same udptable, so some functions in ipv4 hash4 can also
be shared.

Co-developed-by: Cambda Zhu <[email protected]>
Signed-off-by: Cambda Zhu <[email protected]>
Co-developed-by: Fred Chen <[email protected]>
Signed-off-by: Fred Chen <[email protected]>
Co-developed-by: Yubing Qiu <[email protected]>
Signed-off-by: Yubing Qiu <[email protected]>
Signed-off-by: Philo Lu <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Acked-by: Paolo Abeni <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
[ Backport from v6.13 ]
Signed-off-by: Philo Lu <[email protected]>
Signed-off-by: WangYuli <[email protected]>
@sourcery-ai
Copy link

sourcery-ai bot commented Jul 21, 2025

Reviewer's Guide

Introduce optional four-tuple hash (hash4) to accelerate lookup for connected UDP sockets in IPv4 and IPv6 by extending existing hash tables, integrating lookup/insertion/deletion/rehash logic, and providing compile-time no-ops for base-small builds.

Sequence diagram for UDP socket connect with hash4 insertion

sequenceDiagram
    participant App as actor Application
    participant Kernel as Kernel
    participant UDP as udp_connect
    participant Table as udp_table
    App->>Kernel: connect() syscall
    Kernel->>UDP: udp_connect()
    UDP->>Kernel: __ip4_datagram_connect()
    Kernel-->>UDP: (returns success)
    UDP->>UDP: udp4_hash4(sk)
    UDP->>Table: udp_lib_hash4(sk, hash)
    Table->>Table: Insert sk into hash4
    UDP-->>Kernel: return
    Kernel-->>App: connect() returns
Loading

Sequence diagram for UDP packet lookup with hash4

sequenceDiagram
    participant Net as Network Stack
    participant Table as udp_table
    participant Hash4 as hash4
    Net->>Table: __udp4_lib_lookup(...)
    Table->>Hash4: udp4_lib_lookup4(...)
    Hash4->>Hash4: Search for matching socket
    Hash4-->>Table: Return sk or NULL
    Table-->>Net: Return sk (if found)
Loading

Class diagram for updated UDP hash table structures

classDiagram
    class udp_hslot {
        +hlist_head head
        +hlist_nulls_head nulls_head
        +int count
        +spinlock_t lock
    }
    class udp_hslot_main {
        +udp_hslot hslot
        +u32 hash4_cnt
    }
    class udp_table {
        +udp_hslot* hash
        +udp_hslot_main* hash2
        +udp_hslot* hash4
        +unsigned int mask
        +unsigned int log
    }
    udp_table "1" -- "*" udp_hslot : hash
    udp_table "1" -- "*" udp_hslot_main : hash2
    udp_table "1" -- "*" udp_hslot : hash4
    udp_hslot_main "1" -- "1" udp_hslot : hslot
Loading

Class diagram for udp_sock with 4-tuple hash fields

classDiagram
    class udp_sock {
        +int pending
        +__u8 encap_type
        +__u16 udp_lrpa_hash
        +hlist_nulls_node udp_lrpa_node
        ...
    }
Loading

File-Level Changes

Change Details Files
Define and integrate hash4 data structures
  • Extend udp_hslot to support null-list head for hash4
  • Introduce udp_hslot_main with per-slot hash4 counter
  • Augment udp_table to include hash4 array under !CONFIG_BASE_SMALL
  • Provide inline stubs and helpers for hash4 under CONFIG_BASE_SMALL
include/net/udp.h
include/linux/udp.h
Implement hash4 lookup and insertion
  • Add udp4_lib_lookup4 and udp6_lib_lookup4 using hlist_nulls iteration
  • Insert hash4 lookup path in __udp4_lib_lookup and __udp6_lib_lookup
  • Implement udp_lib_hash4, udp4_hash4, and udp6_hash4 for socket insertion
net/ipv4/udp.c
net/ipv6/udp.c
Support hash4 rehash and removal
  • Add udp_rehash4 and udp_unhash4 to move and remove hash4 entries
  • Extend udp_lib_unhash to unhash hash4 entries
  • Update udp_lib_rehash signature to accept newhash4 and invoke rehash4
  • Adjust udp_v4_rehash and udp_v6_rehash to calculate and pass four-tuple hash
net/ipv4/udp.c
net/ipv6/udp.c
include/net/udp.h
Adjust UDP table initialization for hash4
  • Compute slot_size including hash4 and adjust allocation size
  • Modify udp_table_init and udp_pernet_table_alloc to initialize hash4 slots
  • Update hash2 slot initialization to match changed structures
net/ipv4/udp.c

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@deepin-ci-robot
Copy link

deepin pr auto review

代码审查意见:

  1. udp_hslot结构体中,headnulls_head被合并到了一个union中,这可能会增加代码的复杂性,建议保留两个不同的结构体以保持代码的清晰性。

  2. udp_table结构体中,hash2被更改为udp_hslot_main类型,这可能会影响现有的代码,需要检查所有引用hash2的地方是否已经更新。

  3. udp_table_hash4_init函数中,table->hash4的初始化使用了(void *)(table->hash2 + (table->mask + 1)),这可能会导致指针算术运算错误,应该使用table->hash2 + (table->mask + 1)

  4. udp_lib_hash4udp4_hash4函数中,udp_lib_hash4函数被标记为EXPORT_SYMBOL,但是udp4_hash4函数没有被标记,这可能会导致udp4_hash4函数无法在其他模块中使用,建议统一处理。

  5. udp_lib_rehash函数中,newhash4参数被添加,但是没有更新所有调用该函数的地方,可能会导致逻辑错误,需要检查并更新所有调用udp_lib_rehash的地方。

  6. udp_lib_unhash函数中,udp_unhash4函数被调用,但是没有检查sk是否已经被哈希,可能会导致未定义行为,建议在调用udp_unhash4之前添加检查。

  7. udp_table_init函数中,slot_size的计算可能不正确,应该使用sizeof(struct udp_hslot_main)而不是sizeof(struct udp_hslot)

  8. udp_pernet_table_alloc函数中,slot_size的计算可能不正确,应该使用sizeof(struct udp_hslot_main)而不是sizeof(struct udp_hslot)

  9. udp_pernet_table_alloc函数中,udptable->hash2的初始化使用了(void *)(udptable->hash + hash_entries),这可能会导致指针算术运算错误,应该使用udptable->hash + hash_entries

  10. udp_pernet_table_alloc函数中,udptable->hash2的初始化使用了(void *)(udptable->hash + hash_entries),这可能会导致指针算术运算错误,应该使用udptable->hash + hash_entries

以上是代码审查的一些主要意见,具体的修改建议需要根据代码的具体实现和上下文来决定。

This comment was marked as outdated.

@opsiff
Copy link
Member

opsiff commented Jul 21, 2025

checkdepend:
commit 51a00be
Author: Paolo Abeni [email protected]
Date: Fri Dec 6 16:49:14 2024 +0100

udp: fix l4 hash after reconnect

After the blamed commit below, udp_rehash() is supposed to be called
with both local and remote addresses set.

Currently that is already the case for IPv6 sockets, but for IPv4 the
destination address is updated after rehashing.

Address the issue moving the destination address and port initialization
before rehashing.

Fixes: 1b29a730ef8b ("ipv6/udp: Add 4-tuple hash for connected socket")
Reviewed-by: Eric Dumazet <[email protected]>
Link: https://patch.msgid.link/4761e466ab9f7542c68cdc95f248987d127044d2.1733499715.git.pabeni@redhat.com
Signed-off-by: Paolo Abeni <[email protected]>

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @Avenger-285714 - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

[ Upstream commit 51a00be ]

After the blamed commit below, udp_rehash() is supposed to be called
with both local and remote addresses set.

Currently that is already the case for IPv6 sockets, but for IPv4 the
destination address is updated after rehashing.

Address the issue moving the destination address and port initialization
before rehashing.

Fixes: 1b29a73 ("ipv6/udp: Add 4-tuple hash for connected socket")
Reviewed-by: Eric Dumazet <[email protected]>
Link: https://patch.msgid.link/4761e466ab9f7542c68cdc95f248987d127044d2.1733499715.git.pabeni@redhat.com
Signed-off-by: Paolo Abeni <[email protected]>
[ Backport from v6.13-rc3 ]
Suggested-by: Wentao Guan <[email protected]>
Signed-off-by: WangYuli <[email protected]>
@Avenger-285714 Avenger-285714 requested a review from Copilot July 21, 2025 16:42

This comment was marked as outdated.

@opsiff
Copy link
Member

opsiff commented Jul 22, 2025

checkdepend2:
commit 644f910
Author: Philo Lu [email protected]
Date: Fri Jan 10 09:08:10 2025 +0800

udp: Make rehash4 independent in udp_lib_rehash()

As discussed in [0], rehash4 could be missed in udp_lib_rehash() when
udp hash4 changes while hash2 doesn't change. This patch fixes this by
moving rehash4 codes out of rehash2 checking, and then rehash2 and
rehash4 are done separately.

By doing this, we no longer need to call rehash4 explicitly in
udp_lib_hash4(), as the rehash callback in __ip4_datagram_connect takes
it. Thus, now udp_lib_hash4() returns directly if the sk is already
hashed.

Note that uhash4 may fail to work under consecutive connect(<dst
address>) calls because rehash() is not called with every connect(). To
overcome this, connect(<AF_UNSPEC>) needs to be called after the next
connect to a new destination.

[0]
https://lore.kernel.org/all/4761e466ab9f7542c68cdc95f248987d127044d2.1733499715.git.pabeni@redhat.com/

Fixes: 78c91ae2c6de ("ipv4/udp: Add 4-tuple hash for connected socket")
Suggested-by: Paolo Abeni <[email protected]>
Signed-off-by: Philo Lu <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Paolo Abeni <[email protected]>

[ Upstream commit 644f910 ]

As discussed in [0], rehash4 could be missed in udp_lib_rehash() when
udp hash4 changes while hash2 doesn't change. This patch fixes this by
moving rehash4 codes out of rehash2 checking, and then rehash2 and
rehash4 are done separately.

By doing this, we no longer need to call rehash4 explicitly in
udp_lib_hash4(), as the rehash callback in __ip4_datagram_connect takes
it. Thus, now udp_lib_hash4() returns directly if the sk is already
hashed.

Note that uhash4 may fail to work under consecutive connect(<dst
address>) calls because rehash() is not called with every connect(). To
overcome this, connect(<AF_UNSPEC>) needs to be called after the next
connect to a new destination.

[0]
https://lore.kernel.org/all/4761e466ab9f7542c68cdc95f248987d127044d2.1733499715.git.pabeni@redhat.com/

Fixes: 78c91ae ("ipv4/udp: Add 4-tuple hash for connected socket")
Suggested-by: Paolo Abeni <[email protected]>
Signed-off-by: Philo Lu <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Paolo Abeni <[email protected]>
[ Backport from v6.13 ]
Suggested-by: Wentao Guan <[email protected]>
Signed-off-by: WangYuli <[email protected]>
@Avenger-285714 Avenger-285714 requested a review from Copilot July 22, 2025 04:00
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request implements a 4-tuple hash (uhash4) mechanism for connected UDP sockets to significantly improve lookup performance. The enhancement uses local/remote IP addresses and ports as hash keys, enabling connected sockets to bypass expensive compute_score operations during lookups.

  • Adds conditional 4-tuple hash tables and lookup functions for both IPv4 and IPv6 UDP
  • Integrates hash4 into socket connect, disconnect, and rehash operations
  • Provides CONFIG_BASE_SMALL compatibility with no-op implementations

Reviewed Changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
include/net/udp.h Extends UDP data structures with hash4 tables and helper functions
include/linux/udp.h Adds 4-tuple hash fields to udp_sock structure
net/ipv4/udp.c Implements IPv4 4-tuple hash lookup, connect, and table management
net/ipv6/udp.c Implements IPv6 4-tuple hash lookup and connect functionality
net/ipv4/datagram.c Reorders address assignment to support proper rehashing
Comments suppressed due to low confidence (1)

net/ipv6/udp.c:287

  • Calling udp4_hash4() from within a udp6_hash4() function is confusing. Consider renaming to make the relationship clearer, such as udp_ipv4_hash4() or adding a comment explaining why IPv4 function is called for v4-mapped addresses.
		udp4_hash4(sk);

@@ -420,6 +419,7 @@ u32 udp_ehashfn(const struct net *net, const __be32 laddr, const __u16 lport,
return __inet_ehashfn(laddr, lport, faddr, fport,
udp_ehash_secret + net_hash_mix(net));
}
Copy link

Copilot AI Jul 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The EXPORT_SYMBOL is placed after the function definition instead of immediately following it. This placement is inconsistent with kernel coding style where EXPORT_SYMBOL should typically be placed right after the function it exports.

Suggested change
}
}

Copilot uses AI. Check for mistakes.
return NULL;
}

/* udp_rehash4() only checks hslot4, and hash4_cnt is not processed. */
Copy link

Copilot AI Jul 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment is unclear about what 'hash4_cnt is not processed' means in the context of udp_rehash4(). The comment should clarify that hash4_cnt updates are handled separately in the calling function udp_lib_rehash().

Suggested change
/* udp_rehash4() only checks hslot4, and hash4_cnt is not processed. */
/* udp_rehash4() only checks hslot4. Updates to hash4_cnt are handled separately */
/* in the calling function udp_lib_rehash(). */

Copilot uses AI. Check for mistakes.
INET_ADDR_COOKIE(acookie, saddr, daddr);

begin:
/* SLAB_TYPESAFE_BY_RCU not used, so we don't need to touch sk_refcnt */
Copy link

Copilot AI Jul 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment is potentially misleading. While UDP doesn't use SLAB_TYPESAFE_BY_RCU, the comment should clarify that this refers specifically to the hash4 lookup path and why reference counting is not needed here, unlike other socket lookup paths.

Suggested change
/* SLAB_TYPESAFE_BY_RCU not used, so we don't need to touch sk_refcnt */
/* In the hash4 lookup path, SLAB_TYPESAFE_BY_RCU is not used.
* This is safe because RCU ensures that the socket structure
* remains valid during traversal, so we don't need to touch sk_refcnt.
*/

Copilot uses AI. Check for mistakes.
Comment on lines +163 to +164
table->hash4 = (void *)(table->hash2 + (table->mask + 1));
for (int i = 0; i <= table->mask; i++) {
Copy link

Copilot AI Jul 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Variable declaration inside for-loop is a C99 feature. While supported in recent kernel versions, it's more conventional in kernel code to declare loop variables at the beginning of the function for better compatibility and consistency.

Suggested change
table->hash4 = (void *)(table->hash2 + (table->mask + 1));
for (int i = 0; i <= table->mask; i++) {
int i;
table->hash4 = (void *)(table->hash2 + (table->mask + 1));
for (i = 0; i <= table->mask; i++) {

Copilot uses AI. Check for mistakes.
@opsiff opsiff merged commit 21f827b into deepin-community:linux-6.6.y Jul 22, 2025
10 of 14 checks passed
@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: opsiff

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants