On 10/26/26 09:22, Yingjie Wang wrote:
quoted hunk ↗ jump to hunk
@@ -1394,6 +1405,7 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, bool block)
struct ifa6_config cfg;
long max_desync_factor;
struct in6_addr addr;
+ u64 min_preferred_lft;
Minor nit: please fix the variable declaration order above.
quoted hunk ↗ jump to hunk
int ret = 0;
write_lock_bh(&idev->lock);
@@ -1430,9 +1442,13 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, bool block)
* idev->desync_factor if it's larger
*/
cnf_temp_preferred_lft = READ_ONCE(idev->cnf.temp_prefered_lft);
- max_desync_factor = min_t(long,
- READ_ONCE(idev->cnf.max_desync_factor),
- cnf_temp_preferred_lft - regen_advance);
+ max_desync_factor = 0;
+ if (cnf_temp_preferred_lft > 0 &&
+ regen_advance < cnf_temp_preferred_lft)
+ max_desync_factor =
+ min_t(long,
+ READ_ONCE(idev->cnf.max_desync_factor),
+ cnf_temp_preferred_lft - regen_advance);
The above is quite ugly, you can probably make the statement more
palatable using some additional variable to store the intermediate
values.
/P